這個問題在這里已經有了答案: 型別別非型別模板引數初始化不編譯 2 個回答 17 小時前關閉。
在下一個程式中,第二個非型別模板引數在別名模板中struct A被初始化:{}B<T>
template<class T, T>
struct A{};
template<class T>
using B = A<T, {}>;
B<int> b;
GCC 是唯一接受這個的編譯器。Clang 和 MSVC 都拒絕具有類似錯誤的程式。鐺:
error: expected expression
MSVC:
error C2760: syntax error: '{' was unexpected here; expected 'expression'
演示:https ://gcc.godbolt.org/z/6bc3sx451
哪個編譯器在這里?
uj5u.com熱心網友回復:
我會說 GCC 是錯誤的。
[temp.names]中模板引數的語法規定模板引數必須是常量運算式、型別 ID或id 運算式。
{} 既不是運算式,也不是型別,也不是(非)限定名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412638.html
標籤:
