嵌套模板相关名称的统一初始化

时间:2019-07-01 07:46:56

标签: c++ templates initialization

我有以下代码:

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

0 个答案:

没有答案