Ich möchte die Implementierung einer Memberfunktion (Kopierkonstruktor) basierend auf einem Template-Argumentwert auswählen. Ich vermute, es gibt zwei Ansätze: SFINAE und Template-Teilspezialisierung.
Der letzte soll angeblich so aussehen:
%Vor% Es kompiliert nicht: nested name specifier 'B<A, false>::' for declaration does not refer into a class, class template or class template partial specialization
.
Der SFINAE-Ansatz schlägt fehl:
%Vor% Der Kompilierungsfehler hier ist constructor cannot be redeclared
und no type named 'type' in 'std::enable_if<false, B<int, false> >'; 'enable_if' cannot be used to disable this declaration
.
Gibt es eine Möglichkeit, die Probleme zu beheben oder einen anderen Kopierkonstruktor auf der Basis von Vorlagenparametern auszuwählen?
Wie @ Joachim Pileborg im Kommentar sagte, du kannst nicht nur ein Mitglied einer Klasse spezialisieren, du musst die ganze Klasse spezialisieren. Ihre partielle Spezialisierung wird also so aussehen:
%Vor%Die beste Lösung, die Sie für SFINAE bekommen können, wurde von @Piotr Skotnicki
gegebenIch weiß, dass dies ein minimales Beispiel ist, aber was stimmt nicht mit
%Vor%