Heim > Backend-Entwicklung > C++ > Warum erhalte ich einen Neudefinitionsfehler mit „enable_if_t' in Vorlagenargumenten?

Warum erhalte ich einen Neudefinitionsfehler mit „enable_if_t' in Vorlagenargumenten?

Linda Hamilton
Freigeben: 2024-11-19 03:45:03
Original
914 Leute haben es durchsucht

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

Neudefinitionsfehler in „enable_if_t“ in Vorlagenargumenten

In C ist bei der neuen Syntax für „enable_if“ mit „enable_if_t“ beim Portieren von Code auf einen Neudefinitionsfehler aufgetreten neue Syntax. Der folgende Code veranschaulicht das Problem:

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() { }
Nach dem Login kopieren

Das Kompilieren mit GCC (5.2) ergibt den Fehler:

"Fehler: Neudefinition von 'template void g()'" „

Fehlerursache

Der Fehler tritt auf weil die beiden Template-Funktionen f und g den gleichen Template-Typ void() haben. Auch wenn ihre zweiten Vorlagenargumente unterschiedliche Standardwerte haben, haben sie immer noch denselben Typ.

Lösung

Um das Problem zu beheben, aktualisieren Sie die Syntax, um std: zu verwenden: enable_if_t mit einem anderen zweiten Argumenttyp. Zum Beispiel:

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() { }
Nach dem Login kopieren

Diese Änderung stellt sicher, dass die beiden Vorlagenfunktionen unterschiedliche Vorlagentypen haben und beseitigt den Neudefinitionsfehler.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich einen Neudefinitionsfehler mit „enable_if_t' in Vorlagenargumenten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage