enable_if in den Vorlagenparametern erstellt einen Fehler bei der Neudefinition der Vorlage

Imdiese Antwort was ich eigentlich machen wollte ist ein @ definiertypename in meinen Vorlagenparametern, die in der Besetzung @ verwendet werden könntun Rückkehr

Also das

template <typename T>
typename std::enable_if<sizeof(unsigned char) == sizeof(T), unsigned char>::type caster(T value){ return reinterpret_cast<unsigned char&>(value); }

Würde dies werden:

template <typename T, typename R = std::enable_if<sizeof(unsigned char) == sizeof(T), unsigned char>::type >
R caster(T value){ return reinterpret_cast<R&>(value); }

Dies funktioniert und verhält sich wie gewünscht für eine einzelne Vorlagenspezialisierung, aber ich füge eine weitere Spezialisierung hinzu:

template <typename T, typename R = std::enable_if<sizeof(short) == sizeof(T), short>::type>
R caster(T value){ return reinterpret_cast<R&>(value); }

Nun bekomme ich eine Fehlermeldung:

Fehler C2995: 'R Nachlauf (T)': Funktionsvorlage wurde bereits definiert

Gibt es eine Möglichkeit, den Compiler davon zu überzeugen, dass nur eine dieser Spezialisierungen tatsächlich für einen bestimmten Aufruf erstellt wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage