#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;
}
该程序编译细并打印5
用gcc 5.1和更高,但MSVC 19.10.25019给出如下错误:使用constexpr阵列作为模板非类型参数(C++ 14)
错误C2975:“S”:为“改编”无效模板参数,预计 编译时间常数表达式错误C2131:表达没有 计算为一个常数
这是程序合法根据C++ 14 Standard还是gcc在这里太宽大了?
对于初始化记录,Clang也接受这个代码。 – jwimberley
如果用'arr [1]'替换'arr []',MSVC会说什么? – jwimberley
@jwimberley它不会改变任何东西。 –