Отредактировано
У меня есть следующее:
#include <iostream>
#include <vector>
#include <type_traits>
class IListableItem {};
class SubIListableItem : public IListableItem {};
class Base{};
template<class T> struct is_listable_item : public std::false_type {};
template<class T> struct is_listable_item<std::is_base_of<IListableItem, T>> : public std::true_type {};
template<class T, std::enable_if_t<is_listable_item<T>::value, bool> = true>
class ImplementationOfBase : public Base
{
public:
explicit ImplementationOfBase(const std::vector<T> &items): Base(){}
virtual ~ImplementationOfBase(){}
protected:
std::vector<std::wstring> getLabels(const std::vector<T> &source)
{
std::vector<std::wstring> ret;
for (auto &i : source) ret.emplace_back(i.label);
return ret;
}
};
class Page : public ImplementationOfBase<SubIListableItem> {};
int main ()
{
}
Он возвращает мне:
prog.cc:34:58: error: no type named 'type' in 'struct std::enable_if<false, bool>'
34 | class Page : public ImplementationOfBase<SubIListableItem> {};
| ^
Я не могу используйте указатели в этом случае Любые подсказки?
Живой пример: https://wandbox.org/permlink/ESviQ0qHrjLPX9wE
Спасибо.