У меня есть этот код:
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()
Так почему же мне нужно указать аргумент для класса шаблона с параметром по умолчанию, а не для функции шаблона? Есть ли какая-то тонкость, которую я упускаю?
Причина в том, что из-за ошибки вывода аргумента шаблона наверняка. Но я хочу знать почему.