排他的な Constexpr if-else パスの確保
constexpr if-else 節では、else ケースが決して取られないようにすることが重要です。伝統的に、static_assert(false); を使用することがあります。このような場合にエラーを発生させるため。ただし、このアプローチでは、ステートメントを予期せず true としてアサートするコンパイル エラーが発生します。
代わりに、else ケースが到達不能であることを強制するには、破棄されるステートメントをテンプレート パラメーターに依存させる必要があります。これは、テンプレート引数に関係なく std::false_type を返す always_false テンプレートを使用して実現できます。
template <class... T> constexpr std::false_type always_false{}; if constexpr (condition1) { // ... } else if constexpr (condition2) { // ... } else if constexpr (condition3) { // ... } else { static_assert(always_false<T...>); }
この解決策は、C では、プログラムが不正な形式であるとみなされるという事実に基づいています。有効な特殊化は、テンプレートまたは constexpr if-else サブステートメントに対して生成できます。したがって、else 句が到達不能になると、コンパイラはコンパイル エラーを発行し、コードが有効なままであることを確認します。
以上がC で排他的な Constexpr if-else パスを保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。