我有这段代码:
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()
如果我将foo()
作为一个模板函数,并使用相同的模板“签名”,编译器不会抱怨没有指定模板参数:
struct A {};
struct B {
template<class T = A>
void foo() {}
};
B b; //OK
b.foo()
为什么我需要为模板类指定带有默认参数的参数,但不需要为模板函数指定?我是否错过了某些微妙的地方?
原因是因为肯定存在模板参数推导失败。但我想知道为什么。