Когда вы пишете
class Foo{
public:
template <class Bar = MyBar>
Foo(uint32_t i) {}
};
, вы говорите, что Foo
- это не шаблонный класс с конструктором шаблона.
Когда вы пишете
auto pFoo2 = new Foo<DifferentBar>(3);
вы даете Foo
параметр шаблона;но Foo
- это не шаблонный класс.
Итак, ошибка.
Изменение Foo
в классе шаблона с шаблоном параметров по умолчанию
<class Bar = MyBar>
class Foo{
public:
Foo(uint32_t i) {}
};
youимейте это, теперь new Foo<DifferentBar>(3);
является правильным и компилируйте также new Foo(3);
, потому что используется параметр шаблона по умолчанию (MyBar
).