c++ - constexpr 数组作为模板非类型参数的 MSVC 错误

标签 c++ c++11 visual-c++ visual-studio-2017 constexpr

我试图了解我所看到的是 MSVC 编译器错误还是我的误解。我正在尝试使用一个简单的编译时字符串文字模板参数,如下所示:

constexpr const char teststr[] = "teststr";

template <const char *N>
struct Test {
  static constexpr const char *name = N;
};

using TEST = Test<teststr>;

但是,MSVC 报告 teststr 参数不是编译时表达式:error C2975: 'Test': 'N' 的无效模板参数,预期的编译时常量表达式(在 using TEST 行)。

这是我的错误,还是编译器的错误?我使用的是 Visual Studio 2017 版本 15.1。

最佳答案

这是一个compiler bug .

此外,它是一个C++11 feature允许在模板参数中使用内部链接的对象地址,而不是 C++14。

关于c++ - constexpr 数组作为模板非类型参数的 MSVC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48159022/

相关文章:

c++ - x64 上的快速反平方根

C++:在重新分配而不是复制中引用类对象

c++ - 动态对象的统一初始化

c++ - 为什么 C++ 中的表达式类型在不同版本之间发生变化?

visual-studio - 如何在 MFC 中为不同的构建目标使用不同的资源文件

c++ - 将 LPTHREAD_START_ROUTINE 转换为 int

c++ - 无法调用结构内部的成员函数指针

c++ - 使用 std::complex<double> 为 `*` 操作将 int 转换为 double

c++ - 相同方法签名的模板化和显式参数类型版本

c++ - 错误 : IntellliSense: identifier "uint32" is undefined?