使用花括号将初始值临时值初始化为静态数据成员会导致错误

tem*_*boy 10 c++ gcc c++11

这个非常简单的代码在GCC 6.0中出错:

template<class T>
struct S {
    // error: cannot convert 'T' to 'const int' in initialization
    static const int b = T{};
};

int main() {
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我使用常规大括号(T()),那么代码就会编译.这是一个错误吗?代码在clang中编译得很好.

Mer*_*tce 2

有效的原因T()是编译器将其解释为不带参数的函数声明。只需显式转换即可完成编译:

static const int b = (const int) T{};
Run Code Online (Sandbox Code Playgroud)