SFINAE, um die Basisvorlage zu erstellen, führt immer zu Fehler

So entwerfe ich eine Artmy_numeric_cast -Funktion zum Begrenzen der verfügbaren Konvertierungstypen bei Verwendung eines Frameworks, das ich schreibe.

Es war ziemlich einfach, so etwas wie @ zu t

template<typename To, typename From>
constexpr To my_numeric_cast(From);

template<>
constexpr float my_numeric_cast<float, int>(int i) { return i; }

Was funktioniert, wenn der Cast verwendet wird, darf nur von Ints auf Floats geworfen werden. Und das Erzeugen eines Verknüpfungsfehlers, wenn eine Besetzung versucht wird, die nicht auf der weißen Liste steht.

Ich möchte dies jedoch wirklich zu einem Kompilierungsfehler machen, um den Missbrauch viel schneller zu erkennen.
Wie mache ich den Basis-Template-Body gültig, wenn ich ihn instanziiere?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage