私はこのコードを持っている:デフォルトのテンプレートパラメータ:なぜコンパイラはテンプレート引数を指定しないと不平を言うのですか?
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()
では、テンプレート関数の引数ではなく、デフォルトのパラメータでテンプレートクラスの引数を指定する必要があるのはなぜですか?私は行方不明の微妙な点がありますか?
理由は、テンプレート引数の減算に失敗したためです。しかし、私は理由を知りたい。デフォルト引数A
がクラステンプレートB
のために仮定され
B<> b;
:
この質問のタイトルには単語がありませんか? – Pointy
はい。単語を逃した - 不平を言う。それを追加しました。 – badmaash
* [関数テンプレートのデフォルトテンプレート引数](http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates)*の重複が考えられます。 –