constexpr-ifステートメント内の関数パラメータを比較しようとしています。constexprのconstexpr関数パラメータの比較 - 条件によってエラーが発生する場合
は、ここで簡単な例です:
constexpr bool test_int(const int i) {
if constexpr(i == 5) { return true; }
else { return false; }
}
しかし、私はこれは、次のフラグでGCC 7でコンパイルするとき: g++-7 -std=c++1z test.cpp -o test
I次のエラーメッセージが出ます:
test.cpp: In function 'constexpr bool test_int(int)':
test.cpp:3:21: error: 'i' is not a constant expression
if constexpr(i == 5) { return true; }
をしかし、 test_int
を別の機能で置き換えた場合:
constexpr bool test_int_no_if(const int i) { return (i == 5); }
その後、次のコードは、エラーなしでコンパイルします。
int main() {
constexpr int i = 5;
static_assert(test_int_no_if(i));
return 0;
}
constexprの-かのバージョンがstatic_assertだけで正常に動作し、特に以来、コンパイルに失敗した理由を私は理解していません。
これに関するアドバイスをいただければ幸いです。
ありがとうございます! constexpr ifから
なぜconstexpr(i == 5)で、i == 5ではないのですか? – deW1
なぜそんなに複雑ですか?なぜ私は= 5を返さないのですか? – deW1