Наследование от базы Enable_If'd

Я пытаюсь частично специализироваться на черту для массивов не-символов:

template<typename T>
struct is_container : std::false_type {};

template<typename T, unsigned N>
struct is_container<T[N]>
: std::enable_if<!std::is_same<T, char>::value, std::true_type>::type {};

Visual Studio 2010 дает мне тип C2039 ( не является элементом enable_if ...). Тем не менее, не следует Sfinae только внизу здесь вместо ошибки компилятора? Или Sfinae не применяется в этом случае?

Конечно, я мог бы просто отделить специализации для не-CHAR и CHAR:

template<typename T>
struct is_container : std::false_type {};

template<typename T, unsigned N>
struct is_container<T[N]> : std::true_type {};

template<unsigned N>
struct is_container<char[N]> : std::false_type {};

, но я бы очень хотел знать, почему Sfinae не работает в этом конкретном случае.

6
задан fredoverflow 12 September 2011 в 14:46
поделиться