Erreur de redéfinition dans activate_if_t dans les arguments du modèle
En C, la nouvelle syntaxe pour activate_if utilisant activate_if_t a rencontré une erreur de redéfinition lors du portage du code vers le nouvelle syntaxe. Le code suivant illustre le problème :
template<typename T, typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr> void f() { } template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>> void g() { }
La compilation avec GCC (5.2) génère l'erreur :
"erreur : redéfinition du 'modèle
Cause de l'erreur
L'erreur survient car les deux fonctions de modèle f et g ont le même type de modèle void(). Même si leurs deuxièmes arguments de modèle ont des valeurs par défaut différentes, ils ont toujours le même type.
Solution
Pour résoudre le problème, mettez à jour la syntaxe pour utiliser std :: activate_if_t avec un deuxième type d'argument différent. Par exemple :
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr> void f() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr> void g() { }
Cette modification garantit que les deux fonctions de modèle ont des types de modèles distincts et élimine l'erreur de redéfinition.
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!