C ++ Konzepte und Template-Spezialisierung; wie man einen benutzerfreundlichen Compilerfehler bekommt

8

Ich habe zwei (oder mehr) Vorlagen, die jeweils eine bestimmte Gruppe von Klassen anpassen können, die durch ein Konzept identifiziert werden. Damit die beiden Vorlagen denselben Namen haben, müssen sie Spezialisierungen sein.

%Vor%

Dies funktioniert, wenn eine der Spezialisierungen übereinstimmt. Wenn keine Übereinstimmung mit der Basisvorlage besteht, wird der Assertionsfehler angezeigt. Der Mechanismus funktioniert. Ich liebe Konzepte!

Aber die Fehlermeldung, die ich bekomme (GCC 7.2.0), weist auf die Behauptung hin. Kann ich irgendwie veranlassen, dass die Basisvorlage nicht ausgewählt wird, so würde ich eine Fehlermeldung erhalten, die besagt, dass keine Vorlage mit der Argumentklasse übereinstimmt?

    
Wouter van Ooijen 08.12.2017, 12:42
quelle

2 Antworten

2

Hurra, ich habe eine Lösung gefunden! Was Sie brauchen, ist die Beschränkung der Hauptvorlage:

%Vor%

Und Sie erhalten eine gute Diagnosemeldung:

%Vor%

Nun, meine Nachricht ist mit einigen Dummy-Einschränkungen, aber Sie bekommen den Punkt

    
bolov 08.12.2017, 13:58
quelle
0

Versuchen Sie, std :: enable_if zu verwenden, um die Basisvorlage aus der Überladungsauflösung zu entfernen. Etwas wie das:

%Vor%     
Lorenz Rusch 08.12.2017 13:36
quelle

Tags und Links