Fehlermeldung:
%Vor% Quelle auf cpp.sh . Ich dachte, beide typename std::enable_if<std::is_same<T,?>::value>::type
könnten nicht gleichzeitig gültig sein.
Bearbeiten
Für die Nachwelt hier ist meine Bearbeitung basierend auf der Antwort von @ KerrekSB - SFINAE funktioniert nur für abgeleitete Template-Argumente
%Vor%SFINAE funktioniert nur für abgeleitete Vorlagenargumente, d. h. für Funktionsvorlagen. In Ihrem Fall werden beide Vorlagen bedingungslos instanziiert und die Instanziierung schlägt fehl.
Die folgende Variante funktioniert:
%Vor% Jetzt bewirkt Foo()(x)
, dass höchstens eine der Überladungen instanziiert wird, da die Argumentsubstitution in allen anderen fehlschlägt.
Wenn Sie bei Ihrer ursprünglichen Struktur bleiben möchten, verwenden Sie die explizite Klassenvorlagen-Spezialisierung:
%Vor%