Maison > développement back-end > C++ > 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
Libérer: 2024-11-25 11:59:11
original
947 Les gens l'ont consulté

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
Copier après la connexion

}
`

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal