Я пытаюсь понять, почему этот код не компилируется:
// test.h
struct Base
{
virtual ~Base{};
virtual void execute() {}
virtual void execute(int) {}
virtual void execute(double) {}
}
template<class T>
struct Test : Base
{
void execute(typename std::enable_if<std::is_void<T>::value, void>::type)
{
// Do A
}
void execute(typename std::enable_if<!std::is_void<T>::value, int>::type t)
{
// Do B
}
};
// main.cpp
Test<void> t;
Я получаю ошибку компилятора: "нет типа с именем типа".
Та же ошибка, даже если я изменю версию кода A с помощью
std::enable_if<std::is_void<T>::value>
Цель состоит в том, чтобы создать класс, который в зависимости от параметра T создает различные члены-функции. В данном случае 2, но мне было бы интересно и больше.
[Изменить] Я добавил часть наследования, о которой говорил в комментариях.