Warum funktioniert SFINAE (enable_if) nicht für Member-Funktionen einer Klassenvorlage?

9
%Vor%

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%     
Olumide 20.06.2015, 11:05
quelle

1 Antwort

13

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%     
Kerrek SB 20.06.2015, 11:08
quelle

Tags und Links