此代碼被clang拒絕,因爲t.n
不是編譯時常量。爲什麼不能將constexpr成員用於static_assert?
template<int N>
struct s{
constexpr static int n = N;
};
template<typename T>
void test(T& t){
static_assert(t.n == 1);
}
int main(){
s<1> str;
test(str);
}
但g ++放過這個。
哪個是符合標準的行爲?
還有一個奇怪的事實是,如果我改變test
的說法從0到T t
,這將建立在雙方。 關於常量的變化是什麼?
(我怕標題可能無法正確描述這個問題,或詳細,隨時給我更適合標題)