我有这个代码:
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()
那么为什么我需要为具有默认参数的模板类指定参数,而不是为模板函数指定参数呢?我缺少一些微妙之处吗?
原因肯定是模板参数推导失败。但我想知道为什么。