4

以下程序

template <typename = int>
struct S {};

S (s);

由 GCC 编译,只有关于声明符周围多余括号的警告。但是,Clang 为声明给出了一个硬错误

错误:使用推导的类模板特化类型声明变量时不能使用括号

这是一个非常具体的错误(例如S<int> (s);编译),所以我想这是故意的,但我找不到说这是格式错误的措辞。像dcl.dcltemp.class.general这样的明显候选人不会对此说任何话,除非我错过了。

这是 GCC 错误,还是 IFNDR,Clang 有帮助?

4

1 回答 1

1

这似乎是 Clang 过于急切地应用CWG2376,禁止所有声明符运算符,而不仅仅是那些更改声明类型的运算符。诊断最棘手的解析问题的启发式方法也可能在起作用。

于 2021-04-09T04:43:53.367 回答