Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens une erreur de redéfinition avec `enable_if_t` dans les arguments du modèle ?

Pourquoi est-ce que j'obtiens une erreur de redéfinition avec `enable_if_t` dans les arguments du modèle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 03:45:03921parcourir

Why Am I Getting a Redefinition Error with `enable_if_t` in Template Arguments?

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 void g()' "

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!

Déclaration:
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