Heim >Backend-Entwicklung >C++ >Warum erhalte ich einen Neudefinitionsfehler mit „enable_if_t' in Vorlagenargumenten?
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
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!