Проблема с использованием просто Base::Base
состоит в том, что имя Base
(слева) должно быть именем-инжектируемого класса-родителя Base<T, V>
, но поскольку этот родительский объект является зависимым,он не ищется по именам, и поэтому введенное имя класса не найдено.
Вы можете обойти это, используя введенное имя класса в зависимом контексте, так что его поиск откладывается до создания экземпляра.Например:
template<class T, class V>
struct Derived : public Base<T,V>
{
using Derived::Base::Base;
};
Derived
найдено нормально (это имя введенного экземпляра этого экземпляра) и, как известно, является зависимым, поэтому известно, что Base
в середине является зависимым и будет толькоискать при создании экземпляра Derived
, когда все базы полностью известны и могут быть найдены.