Я реализую довольно сложную функциональность на основе шаблонов, и я пришел к ошибке, которую я не могу решить. Я упростил свой случай к этому коду:Как разрешить объявление типа шаблона типа C++
template <typename Head, typename... T>
struct BaseIsFirst {
using Base = Head;
};
template <typename T, typename D>
struct IAction {
std::enable_if_t<std::is_same<T, D::Base>::value> do_action() {}
};
struct Base;
struct Derived1;
struct Derived2;
typedef BaseIsFirst<Base, Derived1, Derived2> MyBIF;
struct Base : public IAction<Base, MyBIF> { };
struct Derived1 : public Base {};
struct Derived2 : public Base {};
Если я пытаюсь скомпилировать это я получаю сообщение об ошибке:
'std::is_same': 'D::Base' is not a valid template type argument for parameter '_Ty2'
Я не вижу никакой возможности раньше определить используемые типы. Есть ли обходной путь для этого, или это просто невозможно?
Кроме того, вы используете 'enable_if' неправильно, если вы действительно не хотите, чтобы это была ошибка в ложном случае. –