ホームページ >バックエンド開発 >C++ >`constexpr if` の `false` 分岐にある `static_assert` の形式が間違っているのはなぜですか?

`constexpr if` の `false` 分岐にある `static_assert` の形式が間違っているのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-25 11:59:111009ブラウズ

Why are `static_assert`s in the `false` branch of a `constexpr if` ill-formed?

False ブランチで Static_Assert が失敗した場合の constexpr

質問:

提案にもかかわらずstatic_assert について明示的に言及されていないのですが、なぜ static_assert が static_assert 内で使用されているのでしょうか。 constexpr if ステートメントの選択されなかった分岐は不正な形式とみなされますか?

答え:

テンプレートのルール ([temp.res]/8) に従って、次の場合、プログラムは不正な形式の NDR (診断は必要ありません) です:

  • 有効な特殊化がありませんテンプレート、またはテンプレート内の constexpr if ステートメントのサブステートメントに対して生成できます。
  • テンプレートはインスタンス化されません。

非依存条件を持つ static_assert の場合false と評価される場合、static_assert を含むテンプレートに対して有効な特殊化を生成できません。したがって、このようなステートメントを含むプログラムは不正形式です。

例:

`
void f() {
if constexpr (false)

static_assert(false);   // ill-formed

}
`

この例では、constexpr if ステートメントの取得されないブランチの static_assert により、関数全体が不正な形式になります。 static_assert を含むテンプレートに対して有効な特殊化を生成できます。

ただし、このルールは影響しません。少なくとも 1 つの型に対して true と評価できる依存条件を含む static_asserts。

以上が`constexpr if` の `false` 分岐にある `static_assert` の形式が間違っているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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