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?