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 ...