sfinae — черты типа C ++ в конструкторе, вызывающие ошибку

Возможный дубликат:
Где и почему я должен поставить ключевые слова «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

Что я сделал не так?

3

Решение

Вы должны добавить typename в std::enable_if<...>::type чтобы решить это …

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector