False ブランチで Static_Assert が失敗した場合の constexpr
質問:
提案にもかかわらずstatic_assert について明示的に言及されていないのですが、なぜ static_assert が static_assert 内で使用されているのでしょうか。 constexpr if ステートメントの選択されなかった分岐は不正な形式とみなされますか?
答え:
テンプレートのルール ([temp.res]/8) に従って、次の場合、プログラムは不正な形式の NDR (診断は必要ありません) です:
非依存条件を持つ 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 サイトの他の関連記事を参照してください。