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
Libérer: 2024-11-19 03:45:03
original
908 Les gens l'ont consulté

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() { }
Copier après la connexion

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() { }
Copier après la connexion

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!

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