Heim > Artikel > Backend-Entwicklung > Warum führt die Verwendung von „std::enable_if_t“ mit Standardwerten zu einem Neudefinitionsfehler?
Neudefinitionsproblem mit enable_if_t-Vorlagenargumenten
Im bereitgestellten Code der Versuch, die Typbeschränkung std::enable_if mithilfe der neuen Syntax zu konvertieren (typename = std::enable_if_t...) führt zu einem Neudefinitionsfehler. Dies liegt daran, dass die beiden Vorlagenfunktionen:
template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>> void g() { }
und
template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>> void g() { }
beide vom Typ template
Um dieses Problem zu beheben, müssen die Standardwerte aus der Einschränkung „enable_if_t“ entfernt werden. Daraus ergibt sich folgender Code:
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*> void g() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*> void g() { }
In diesem Fall ist das zweite Typargument nun ein Zeiger, dessen Typ vom ersten abhängig ist. Der Compiler kann den Typ T ersetzen, um festzustellen, ob ein Konflikt zwischen den beiden Vorlagen besteht, und er löst auf, dass kein Konflikt vorliegt.
Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung von „std::enable_if_t“ mit Standardwerten zu einem Neudefinitionsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!