Специализация наследуемого вложенного шаблона класса
Следующий исходный код взят из:Понимание частичной специализации унаследованных вложенных шаблонов классов
#include <type_traits>
struct Base
{
template<class U, class _ = void> struct Inner: std::true_type {};
template<class _> struct Inner<char, _>: std::false_type {};
};
struct Derived : Base
{
};
template<class _> struct Derived::Inner<int, _>: std::false_type {};
У меня была проблема со специализацией унаследованного класса, поэтому я погуглил и выяснил вопрос выше. Исходный код в вопросе выше скомпилирован без каких-либо проблем в gcc / clang, но msvc отказывается компилировать его, выдавая C2427 (см.https://msdn.microsoft.com/en-us/library/10het5hx.aspx).
Ситуация, описанная выше (специализирующаяся на вложенном шаблонном классе не шаблонного класса), сильно отличается от ситуации, описанной вhttps://msdn.microsoft.com/en-us/library/10het5hx.aspx (определить вложенный не шаблонный класс шаблонного класса), я думаю.
Какой из MSVC против GCC / Clang не так? Или просто по стандарту так непонятно указывать такое поведение?
Я надеюсь, что MSVC не так ...