失敗した static_assert は if constexpr (false) ブロックにどのような影響を与えますか?
if constexpr の選択されなかったブランチ内の static_assertステートメントは不正な形式であるとみなされ、診断は必要ありません。この結果は、constexpr if ステートメント内のテンプレートまたはサブステートメントに対して有効な特殊化を生成できない場合、プログラムが不正な形式であるとみなす [temp.res]/8 のルールに由来します。
の場合static_assert の場合、条件が非依存で false と評価される場合、アサーションを含むテンプレートに対して有効な特殊化を生成できません。これにより、分岐が行われない場合でもプログラムの形式が正しくなくなります。
ただし、依存条件を持つ static_assert は影響を受けません。条件が少なくとも 1 つの型に対して true と評価できる場合、テンプレートは有効なままです。
例
次のコードを考えてみましょう:
template< typename T>< constexpr void other_library_foo(){ static_assert(std::is_same<T,int>::value); } template<class T> void g() { if constexpr (false) other_library_foo<T>(); } int main(){ g<float>(); g<int>(); }
if constexpr 条件が false であるにもかかわらず、other_library_foo の static_assert が原因で、コードは依然として不正な形式になっています。 false と評価される非依存条件が含まれています。
以上がUntaken `if constexpr` ブロックで失敗した `static_assert` はプログラムの有効性にどのように影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。