GCC 4.8.1 akzeptiertWas ist die standardkonforme Syntax für die Vererbung von Template-Konstruktoren?
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
aber MSVC nicht. Auf der anderen Seite akzeptiert MSVC
aber GCC nicht. Dann habe ich eine andere Art von Erklärung in dieser Frage gesehen: c++11 inheriting template constructors
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass<T>;
};
für die MSVC warnt vor einem „veralteten Erklärung Stil“ und GCC sagt
prog.cpp:8:24: error: ‘template<class T> class Baseclass’ used without template parameters
using typename Baseclass::Baseclass<T>;
Ich dachte, das erste Beispiel das wäre Standardkonforme Syntax. Intuitiv sieht es für mich richtig aus.
Was ist die C++ 11 Standard konforme Syntax?
Welche MSVC-Version? VS2013 unterstützt keine ererbenden Konstruktoren. AFAIK, der erste ist die korrekte Syntax. 'using Baseclass :: BaseClass' sollte für Fälle funktionieren, in denen 'BaseClass' selbst keine Klassenvorlage ist, sondern eine Konstruktorvorlage hat. –
Praetorian
@Praetorian Jetzt ist das überraschend. Aber ich habe immer nur den Standard- und Kopierkonstruktor benutzt, und jetzt, nachdem ich einen anderen Konstruktor getestet habe, sehe ich, dass Sie Recht haben. Werden Kopier- und Standardkonstruktoren automatisch geerbt? –
Sie müssen den Standard überprüfen, aber ich bin mir ziemlich sicher, dass die speziellen Memberfunktionen * nie * vererbt werden. Sie können vom Compiler automatisch in der abgeleiteten Klasse deklariert werden, indem sie den üblichen Regeln für ihre Erzeugung folgen. – Praetorian