Возможный дубликат:
Где и почему я должен поставить ключевые слова «template» и «typename»?
Я хочу иметь конструктор, который принимает один аргумент и включен, только если тип этого аргумента имеет тип члена ::t
который должен быть подтипом некоторого другого типа. Я использую черты типа для этого, и код выглядит так:
#include <type_traits>
struct Y{};
struct X{
//Only allow if T has a type member T::t which is a subtype of Y
template <typename T>
X(T* t, std::enable_if<std::is_base_of<Y, typename T::t>::value, int>::type e = 0){}
};
Однако g ++ жалуется на следующее:
test/test.cpp:8:75: error: ‘std::enable_if<std::is_base_of<Y, typename T::t>::value, int>::type’ is not a type
Что я сделал не так?
Вы должны добавить typename
в std::enable_if<...>::type
чтобы решить это …
Других решений пока нет …