Я пытаюсь частично специализировать черту для массивов без символов:
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 (type
не является элементом enable_if
...). Тем не менее, разве SFINAE не должен просто опускаться здесь вместо того, чтобы выдавать ошибку компилятора? Или SFINAE не применяется в этом случае?
Конечно, я мог бы просто разделить специализации на non-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 не работает в данном конкретном случае.