#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它不會改變任何東西。 –