私はこのコードを持っています:
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()
では、なぜテンプレート クラスの引数を既定のパラメーターで指定する必要があるのに、テンプレート関数の引数を指定する必要がないのでしょうか。私が見逃している微妙な点はありますか?
その理由は、確かにテンプレートの引数推定の失敗によるものです。しかし、私はその理由を知りたいです。