Maison  >  Article  >  développement back-end  >  Pourquoi les « static_assert » dans la branche « false » d'un « constexpr if » sont-ils mal formés ?

Pourquoi les « static_assert » dans la branche « false » d'un « constexpr if » sont-ils mal formés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-25 11:59:11919parcourir

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

constexpr si avec Failed Static_Assert dans la fausse branche

Question :

Malgré la proposition manque de mention explicite de static_assert, pourquoi son utilisation dans la branche non prise d'un constexpr si la déclaration est considérée comme mal formée ?

Réponse :

Selon la règle des modèles ([temp.res]/8), un programme est mal formé NDR (aucun diagnostic requis) si :

  • Aucune spécialisation valide ne peut être générée pour un modèle, ou une sous-instruction d'un constexpr si déclaration dans un modèle.
  • Le modèle n'est pas instancié.

Dans le cas d'un static_assert avec une condition non dépendante qui est évaluée à false, aucune spécialisation valide ne peut être générée pour le modèle contenant le static_assert. Par conséquent, le programme contenant une telle instruction est mal formé.

Exemple :

`
void f() {
if constexpr (false)

static_assert(false);   // ill-formed

}
`

Dans cet exemple, le static_assert dans la branche non prise de l'instruction constexpr if rend la fonction entière mal formée, car aucune spécialisation valide ne peut être générée pour un modèle contenant static_assert.

Cependant, cette règle n'affecte pas static_asserts avec un condition dépendante qui peut être évaluée comme vraie pour au moins un type.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn