Я пытаюсь частично специализироваться на черту для массивов не-символов:
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 не работает в этом конкретном случае.