t.n
はコンパイル時定数ではないため、このコードはclangによって拒否されました。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 ++はこれをやりましょう。
標準に準拠した動作はどれですか?
もう1つ不思議な事実は、test
の引数をT& t
からT t
に変更すると、これは両方で構築されます。 コンスタンスについては何が変更されましたか?クランはによるので、正しいことを
(I恐れタイトルが正しくこの質問を記述するか、詳細にないかもしれません。私に、より適切なタイトルを与えること自由に感じ)