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?