c++ - 使用大括号将临时值初始化为静态数据成员的初始化程序会导致错误

标签 c++ c++11 gcc

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

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

int main() {
}

奇怪的是,如果我改用常规大括号 (T()),则代码可以编译。这是一个错误吗?代码在 clang 中编译良好。

最佳答案

T() 起作用的原因是编译器将其解释为不带参数的函数声明。编译将通过显式转换完成:

static const int b = (const int) T{};

关于c++ - 使用大括号将临时值初始化为静态数据成员的初始化程序会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677822/

相关文章:

c++ - 给出恒定随机数的乘法函数

c++ - 如何检测我的源代码中使用了哪些 C++11 功能

使用 MPI/OpenMP 的派生数据类型(嵌套类对象)容器的 C++ 程序

c++ - 调用 const 函数地址传递给 gcc 内联汇编器 (avr-gcc)

python - 海湾合作委员会错误 : command 'gcc-4.0' failed with exit status 1

c++ - 神秘的编译器错误,可能与使用 "virtual"有关?

c++ - 如何编写一个函数来测试链接列表是否已排序

虚拟表上的 C++ 虚拟析构函数和类的类型信息

c++ - 多态对象的外部化渲染

C++11 std::generate 和 std::uniform_real_distribution 调用两次给出了奇怪的结果