我有以下代码:
template<typename T>
class Test{
void foo() {
int a = 0;
T{this, T::t{a}};
}
};
此版本在MS编译器上进行了编译(已检查2019和2017),并按预期工作(我从较大的代码中提取了未编译的部分),但无法在GCC和Clang上进行编译。这里的问题是使用T::t
的初始化表达式的第二部分。两者都针对语法错误发出了很奇怪的错误:
gcc:
错误:'{'令牌之前的预期主要表达式。
c语:
source>:5:21:错误:预期为'}'
T{this, T::t{a}}; ^
:5:10:注意:要匹配此'{'
T{this, T::t{a}};
由于括号似乎还可以,所以两个错误都不太清楚且容易引起误解。哪个编译器对代码正确,为什么?代码段中有什么问题?如果c ++中不允许使用该代码,则错误应更能说明问题。
godbolt:https://godbolt.org/z/8_D8qh