【发布时间】:2021-01-14 12:32:55
【问题描述】:
我找不到任何关于 C++ 模块和概念交互的信息。从模块中导出概念的语法是否正确?
export module Module;
template <typename S>
export concept sequence = true;
【问题讨论】:
标签: c++ module c++20 c++-concepts
我找不到任何关于 C++ 模块和概念交互的信息。从模块中导出概念的语法是否正确?
export module Module;
template <typename S>
export concept sequence = true;
【问题讨论】:
标签: c++ module c++20 c++-concepts
export 导出声明。概念定义是一个声明,因此可以导出。就此类导出工作的结果而言,它的工作方式与导出任何其他声明一样。
至于具体语法,export应用于“声明”语法规则。而“模板声明”是一种“声明”。 “模板声明”包括模板头,但“模板声明”的语法定义说it's a "template-head" followed by a "declaration"或是一个“模板头”,后跟一个“概念定义”。
所以从语法来看,如果你想export一个概念定义,你必须在模板头之前做,因为concept-definition不包括export作为有效的语法。
但是,如果您想知道如何导出常规模板,您可能会认为,根据该语法,export 可能位于“模板头”之前或之后。 然而,standard specifically says this:
[模板声明的]声明不应是导出声明。
由此,我们得出结论,所有模板将export放在模板头之前。
【讨论】: