【发布时间】:2014-10-31 11:00:51
【问题描述】:
考虑以下两个引号:
[C++11: 14.7.1/1]:[..] 类模板特化的隐式实例化导致声明的隐式实例化,而不是定义或默认参数的隐式实例化类成员函数、成员类、作用域成员枚举、静态数据成员和成员模板; [..]
[C++11: 14.7.1/8]:类模板的隐式实例化不会导致该类的任何静态数据成员被隐式实例化。
(在[C++14: 14.7.1/1] 和[C++14: 14.7.1/9] 中也找到了逐字记录——除了对异常规范的新引用)
我在这里缺少什么?隐式实例化类模板和隐式实例化类模板特化有什么区别?这两个引号怎么不冲突?
[C++11: 14.7.1/5]:如果在需要完全定义的对象类型的上下文中使用类类型,或者如果类类型的完整性可能影响程序的语义,则类模板特化会被隐式实例化。 [..]
【问题讨论】:
-
除非我读错了,否则它们听起来并不冲突。第一个引号是:“...导致声明的隐式实例化,但不是...静态数据成员”。第二个引用也说明了这一点。
-
@Cyber:我认为你误读了。那将是一个非常奇怪且没有任何意义的句子结构:what 的“声明”?相反,我认为第一个引用表明
的声明(但不是定义)是隐式实例化的。第二个引用说 没有被隐式实例化。最简单的解决方案是 Angew 所说的:第二个引用缺少限定词“定义”。但就是这样,它不见了,所以现在引号冲突。 -
哦,好吧,我认为“但不是”适用于声明的其余部分,但在重新阅读后,情况并非如此。
标签: c++ templates c++11 language-lawyer c++14