私は唯一の0より大きい符号なし整数を受け入れ、それをチェックするために、デバッグアサートを持っている機能を持っている:コードはまだコンパイルしても、そのパラメータを受け入れるようパラメータがコンパイル時にわかっている場合は、オプションのstatic_assertを実行できますか?
void foo(unsigned int x) {
assert(x > 0);
}
は、ここstatic_assert
を追加することが可能ですコンパイル時定数はありませんか?
foo(0); // compilation error
foo(1); // fine
foo(get_x_from_user()); // fine
は、私は、テンプレートパラメータxを作ることができます知っているが、私はずっとコールのこのスタイルを維持することを好む:foo(5);
ではなくfoo<5>();
を。
カスタム整数型でこの問題を解決する方法があるかもしれないと思っていましたが、それほど遠くには到達できませんでした。これを行う方法はありますか?
'static_assert'はコンパイル時に知られている値用ですが、' assert'は実行時に実行されます。 – CinCout
'static_assert'を使って' x'をアサートするには 'x'は' constexpr'でなければなりません。 'get_x_from_user()'によって返されたランタイム値を 'constexpr'にすることができるかどうかはわかりません。 – wowofbob
@CinCout、私は認識している..? –