【发布时间】:2017-09-17 14:15:23
【问题描述】:
#include <iostream>
using namespace std;
template<const int arr[]>
struct S {
static constexpr int value = arr[0];
};
constexpr int arr[] = { 5 };
int main() {
cout << S<arr>::value << endl;
}
此程序编译良好并使用 gcc 5.1 及更高版本打印 5,但 MSVC 19.10.25019 给出以下错误:
错误 C2975:“S”:“arr”的模板参数无效,应为 编译时常量表达式错误 C2131:表达式没有 计算为常数
这个程序根据 C++14 标准是有效的,还是 gcc 在这里太宽松了?
【问题讨论】:
-
郑重声明,Clang 也接受此代码。
-
如果将
arr[]替换为arr[1],MSVC 会说什么? -
@jwimberley 它不会改变任何东西。
标签: c++ gcc visual-c++ c++14 constexpr