此代码被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
,这将建立在双方。 关于常量的变化是什么?
(我怕标题可能无法正确描述这个问题,或详细,随时给我更适合标题)