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
Linda HamiltonOriginal
2024-11-19 03:45:03908Durchsuche

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() { }

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() { }

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!

Stellungnahme:
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