dav*_*bak 3 c++ language-lawyer
cppreference我指的是《定义和ODR(单一定义规则)》。]C++ 标准(如上面#1 中所声明的)规定,不违反 ODR的要求之一是“每个定义都包含相同的标记序列”。
这看起来很清楚,除了我很好奇:
在声明模板的类型模板参数时,是否也typename不允许class在两个不同的定义(在两个不同的翻译单元等)中进行替换?
因为这些关键字通常是可以互换的。
(我知道在任何情况下都无法在模板参数中typename替换的特殊情况。)class
typename和class不是同一个令牌。因此,是的,如果同一实体的两个定义在此方面不同,则属于 ODR 违规。
ODR 规则的编写期望模板/内联定义仅在头文件中写出一次,然后包含在其他文件中,因此不应发生此类变化。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |