Spezialisierung der vererbten verschachtelten Vorlagenklasse

Der folgende Quellcode stammt von:eilweise Spezialisierung von vererbten verschachtelten Klassenvorlagen versteh

#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 {};

Ich hatte ein Problem mit der Spezialisierung geerbter Klassen, also habe ich gegoogelt und die obige Frage herausgefunden. Der Quellcode in der obigen Frage wurde ohne Probleme in gcc / clang kompiliert, aber msvc weigert sich, ihn zu kompilieren und gibt C2427 aus (siehehttps: //msdn.microsoft.com/en-us/library/10het5hx.asp).

Die oben beschriebene Situation (Spezialisierung der verschachtelten Vorlagenklasse auf eine Nicht-Vorlagenklasse) unterscheidet sich erheblich von der in @ beschriebenen Situatiohttps: //msdn.microsoft.com/en-us/library/10het5hx.asp (Definiere die verschachtelte Nicht-Template-Klasse einer Template-Klasse), denke ich.

Welche von msvc vs. gcc / clang ist falsch? Oder ist nur der Standard so unklar, um dieses Verhalten zu spezifizieren?

Ich hoffe, msvc ist falsch ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage