Warum findet ptr_fun das mehrdeutig, selbst wenn Template-Parameter angegeben werden?

8

Also, hier ist ein grundlegender Code, der meine Frage veranschaulicht:

%Vor%

Wir haben 2 Überladungen für eine Funktion mit einer anderen Anzahl von Parametern. Dann versuche ich die Einzelparameterversion in einem Funktor zu drehen. Natürlich habe ich folgenden Fehler:

%Vor%

Ich weiß, ich könnte einfach func und damit fertig sein , aber es hat mich dazu gebracht zu denken, warum ist das mehrdeutig ? Keine der beiden Versionen von std::ptr_fun hat Standardparameter in den Template-Definitionen, und ich habe explizit gesagt, dass die beiden Template-Parameter int sind.

In der Tat, wenn ich einfach mache, was der Compiler im Wesentlichen während der Template-Instanziierungszeit tut:

%Vor%

Es kompiliert einfach gut, irgendwie ist die Ambiguität weg! Wer hat irgendeinen Einblick, warum das der Fall ist?

    
Evan Teran 11.07.2011, 20:50
quelle

1 Antwort

4

Wenn Sie eine Template-Funktion aufrufen, müssen Sie keine Template-Parameter angeben, die vom Typ der Funktionsargumente abgeleitet werden können. Daher gibt der Aufruf von std::ptr_fun<int, int> nicht wirklich an, welche der std::ptr_fun -Überladungen Sie aufrufen, und hängt von der Funktion ab, die Sie als Argument für die Auflösung übergeben. Da Ihre func Überladungen aufweist, die für beide std::ptr_fun Überladungen passen, gibt es Mehrdeutigkeiten.

Bearbeiten: Hier ist ein Beispiel, um meinen Punkt zu demonstrieren - lief auf Ideone , es zeigt, dass beide Funktionsaufrufe den gleichen Typ zurückgeben.

%Vor%     
Node 11.07.2011, 20:59
quelle

Tags und Links