Maison > développement back-end > C++ > Pourquoi l'utilisation de « std::enable_if_t » avec les valeurs par défaut entraîne-t-elle une erreur de redéfinition ?

Pourquoi l'utilisation de « std::enable_if_t » avec les valeurs par défaut entraîne-t-elle une erreur de redéfinition ?

DDD
Libérer: 2024-11-12 11:24:02
original
311 Les gens l'ont consulté

Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

Problème de redéfinition avec les arguments du modèle activate_if_t

Dans le code fourni, la tentative de conversion de la contrainte de type std::enable_if à l'aide de la nouvelle syntaxe (typename = std::enable_if_t...) entraîne une erreur de redéfinition. En effet, les deux fonctions de modèle :

template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>>
void g() { }
Copier après la connexion

et

template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>>
void g() { }
Copier après la connexion

sont toutes deux de type templatevoid(). Le fait que le deuxième argument de type ait des valeurs par défaut différentes n'est pas pertinent, car le compilateur considère les deux modèles comme identiques.

Pour résoudre ce problème, il est nécessaire de supprimer les valeurs par défaut de la contrainte activate_if_t. Cela donne le code suivant :

template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*>
void g() { }

template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*>
void g() { }
Copier après la connexion

Dans ce cas, le deuxième argument de type est désormais un pointeur, dont le type dépend du premier. Le compilateur peut remplacer le type T pour déterminer s'il y a un conflit entre les deux modèles, et il résoudra qu'il n'y en a pas.

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