请考虑以下两个引号:
[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]:如果在需要完全定义的对象类型的上下文中使用类类型,或者如果类类型的完整性可能影响类的语义,则隐式实例化类模板特化 . 程序 . [..]
1 回答
我不认为报价实际上是冲突的 . 帕 . 1表示静态成员的声明是实例化的,但定义不是 . 帕 . 8表示该成员未实例化 . 由于某事物的非定义声明不是真的那样,我会说他们说同样的话 . 帕 . 或许可以澄清8也包括"definition"这个词 .
以下是一些引用我相信支持我对Par.8的推理(尽管不幸的是它们都不是一个明确的证据):
(全部取自C 11,强调我的)
对我来说,这些暗示"instantiating a static data member"实际上意味着“实例化静态数据成员的 definition ” .