Этот фрагмент кода:
struct B {
A a;
};
выдает ошибку:
invalid use of template-name 'A' without an argument list
Это потому, что A
является шаблоном, и, следовательно, компилятор требует, чтобы вы использовали его как таковой , Это верно, даже если A
имеет аргумент по умолчанию; вам все еще нужно использовать <>
для обозначения того, что вы используете шаблон.
Так что этот фрагмент кода:
struct B {
A<> a; // note the <>
};
будет скомпилирован очень хорошо.
Как на почему параметры шаблона не могут быть выведены для нестатических c членов данных, похоже, по той же причине, почему это не работает:
struct B {
auto a = 0; // error
}
См. это вопрос и ответ для более подробной информации.