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 :
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!