ホームページ  >  記事  >  バックエンド開発  >  Untaken `if constexpr` ブロックで失敗した `static_assert` はプログラムの有効性にどのように影響しますか?

Untaken `if constexpr` ブロックで失敗した `static_assert` はプログラムの有効性にどのように影響しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-27 04:17:09720ブラウズ

How Does a Failed `static_assert` in an Untaken `if constexpr` Block Affect Program Validity?

失敗した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。