C++ 具有推断类模板专用化类型的变量的声明符中的冗余括号
以下C++ 具有推断类模板专用化类型的变量的声明符中的冗余括号,c++,templates,language-lawyer,ctad,C++,Templates,Language Lawyer,Ctad,以下 模板 结构S{}; S(S);; 由GCC编译,只有一个关于声明符周围的冗余括号的警告。但是,Clang为声明提供了一个硬错误 错误:在声明派生类模板专用化类型的变量时不能使用括号 这是一个非常具体的错误(例如,S(S);compiles),所以我想这是故意的,但我找不到表示这是格式错误的措辞。显而易见的候选人喜欢这个,除非我错过了,否则就什么也不说 这是一个GCC错误,还是IFNDR,而Clang很有帮助?这似乎是由于禁止所有声明器操作符(而不仅仅是那些更改声明类型的操作符)而急切地应
模板
结构S{};
S(S);;
由GCC编译,只有一个关于声明符周围的冗余括号的警告。但是,Clang为声明提供了一个硬错误
错误:在声明派生类模板专用化类型的变量时不能使用括号
这是一个非常具体的错误(例如,S(S);
compiles),所以我想这是故意的,但我找不到表示这是格式错误的措辞。显而易见的候选人喜欢这个,除非我错过了,否则就什么也不说
这是一个GCC错误,还是IFNDR,而Clang很有帮助?这似乎是由于禁止所有声明器操作符(而不仅仅是那些更改声明类型的操作符)而急切地应用了Clang。诊断最棘手的解析问题的启发式方法也可能发挥作用
template <typename = int>
struct S {};
S (s);