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 ?
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() { }
et
template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>> void g() { }
sont toutes deux de type template
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() { }
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!