Fyt*_*tch 16 c++ grammar templates declaration language-lawyer
GCC和Clangtemplate<typename>;在全球范围内是否是C++中的有效声明存在分歧.
我希望在C++标准中不允许它,因为模板化属于声明语句,而不是表达式语句,因此也不属于null语句(语句;).
那么,这是Clang中的一个错误吗?
Swi*_*Pie 14
这是clang的特殊行为已经存在了很长时间:缺少声明只会产生警告.它跟这个一样:
int;
Run Code Online (Sandbox Code Playgroud)
g ++会显示错误,而clang只会显示警告.这与标准不矛盾.
警告:声明不声明任何内容[-Wmissing-declarations]
-Werror=missing-declarations 把事情做好.
Rak*_*111 13
并不是的.该标准在[temp] p2中明确禁止这样的声明;
该声明在模板声明(如有)
声明或定义函数,类或变量,或
定义成员函数,成员类,成员枚举或类模板或嵌套在类模板中的类的静态数据成员,或者
定义类或类模板的成员模板,或
是一个演绎指南,或
是一个别名声明.
空声明与这些子句中的任何一个都不匹配.现在标准规定,需要一个实现来发出任何违反其规则的诊断消息,比如这个.请注意,它表示诊断,它不指定是发出警告还是错误(甚至是注释).编译器可以提供扩展,使您编写的内容有效,因为它不会改变格式良好的程序的含义.
所以不,两者都是对的.但是,clang的行为是由于扩展,而不是标准指定的内容.
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |