Maison > développement back-end > C++ > Le comportement de « static_assert » varie-t-il dans l'instanciation de modèle entre GCC et Clang ?

Le comportement de « static_assert » varie-t-il dans l'instanciation de modèle entre GCC et Clang ?

DDD
Libérer: 2024-11-05 01:10:01
original
603 Les gens l'ont consulté

Does `static_assert` Behavior Vary in Template Instantiation Between GCC and Clang?

Évaluation du comportement de static_assert dans l'instanciation de modèle

Dans ce code, un static_assert est utilisé pour valider la valeur du paramètre de modèle non-type répondre. Cependant, le comportement de cette assertion varie entre gcc et clang :

<code class="cpp">template <int answer> struct Hitchhiker {
  static_assert(sizeof(answer) != sizeof(answer), "Invalid answer");
};

template <> struct Hitchhiker<42> {};</code>
Copier après la connexion

Comportement de gcc :

gcc ne déclenche l'assertion que lors de l'instanciation d'Hitchhiker avec un paramètre autre que 42.

Comportement de clang :

clang génère l'erreur d'assertion même si le modèle n'est pas explicitement instancié.

Interprétation standard :

Le standard C stipule que si un modèle n'a pas de spécialisations valides et n'est pas instancié, le modèle est considéré comme mal formé. Cela signifie qu'aucun diagnostic n'est requis.

Analyse :

Les deux compilateurs ont un comportement correct. Clang choisit de fournir un diagnostic même si la norme ne l'exige pas.

Approche alternative :

Pour permettre uniquement une réponse de 42, le modèle général peut être omis , et le modèle spécialisé défini comme suit :

<code class="cpp">template <> struct Hitchhiker<42> {};</code>
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal