Ich habe diesen Code:Default-Template-Parameter: Warum beschwert sich der Compiler, Template-Argument nicht anzugeben?
struct A{};
template<class T = A>
struct B {
void foo() {}
};
B b; //Error: missing template arguments before 'b'
//Error: expected ';' before 'b'
//More errors
b.foo()
Wenn ich foo()
als Template-Funktion mit der gleichen Vorlage 'Signatur' zu machen, der Compiler beschwert sich nicht über die Vorlage nicht Argumente spezifizieren:
struct A {};
struct B {
template<class T = A>
void foo() {}
};
B b; //OK
b.foo()
Also, warum muss ich ein Argument für eine Template-Klasse mit einem Standard-Parameter angeben, aber nicht für eine Template-Funktion? Gibt es etwas Subtilität, die ich vermisse?
Der Grund ist wegen der Vorlage Argumentabzugsfehler sicher. Aber ich möchte wissen warum.
Gibt es im Titel dieser Frage ein Wort? – Pointy
Ja. Verpasste das Wort - beschweren. Hinzugefügt es. – badmaash
Mögliches Duplikat von * [Standardvorlagenargumente für Funktionsvorlagen] (http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates) *. –