问题描述
以下program
template <typename = int>
struct S {};
S (s);
由 GCC 编译,只有关于声明符周围多余括号的警告。但是,Clang 给出了声明的硬错误
错误:声明具有推导类模板特化类型的变量时不能使用括号
这是一个相当具体的错误(例如 S<int> (s);
编译),所以我猜这是故意的,但我找不到说这是格式错误的措辞。像 dcl.dcl 和 temp.class.general 这样的明显候选人不会对此发表任何意见,除非我错过了。
这是 GCC 错误,还是 IFNDR,Clang 有帮助?
解决方法
这似乎是 Clang 过于急切地应用 CWG2376,禁止所有 声明符运算符,而不仅仅是那些更改声明类型的运算符。诊断最棘手的解析问题的启发式方法也可能在起作用。