Variadische Template-Spezialisierung mit const-Referenz

8

Wie spezialisiere ich die variadische Template-Funktion, die const als Referenz für ein Argument hat?

Beispiel:

%Vor%

Beim Aufruf der Funktion foo mit dem deklarierten const Test& -Argument sieht der Compiler keine spezielle Funktion und keine Rückfälle für die gelöschte Funktion:

%Vor%




Der obige Code wird korrekt kompiliert, wenn ich den const-Verweis vom Argument entferne. Was mache ich falsch?

Der Code kann hier

gefunden werden     
Bected 17.03.2017, 09:37
quelle

2 Antworten

3

Der automatische Vorlagenabzug ist nicht schlau genug, um zu vermuten, dass der letzte Vorlagenparameter auf const Test& anstelle von Test gesetzt werden soll. Genauere Typableitung entfernen immer CV-Qualifier von einem Typ.

Sie haben eine neue explizite Template Instanziierung hier:

%Vor%     
Serge Ballesta 17.03.2017, 10:11
quelle
7

Dies liegt daran, dass die Vorlagenargumente, die die primäre Vorlage für Ihren Aufruf ableitet, int , const char* und Test , nicht const Test& sind. Das bedeutet, dass Ihre Spezialisierung nicht verwendet wird, weil die Vorlagenargumente nicht mit den Parametern übereinstimmen.

Ihre einfachste Option ist die Bereitstellung einer separaten Überladung anstelle einer Spezialisierung:

%Vor%

Live-Demo

    
TartanLlama 17.03.2017 09:55
quelle