g++-4.0



  • Hat jemand von euch schonmal g++-4.0 ausprobiert?
    Bei mir macht der bei jeglicher Art von Templates Probleme.

    error: explicit specialization of class XYZ must be introduced by 'template <>'
    

    Dieses Beispiel war eine ganz simple Template Klasse, ohne jegliche Spezialisierung.

    Hat jemand schon Erfahrung mit dem neuen g++?



  • da wärs sinnvoll das beispiel mal zu posten



  • Im ANSI-Standard werden normale und Template-Funktionen nicht unterschieden. Deshalb muss man vor der Spezialisierung noch ein template<> einfügen.



  • Ich habs schon.
    Folgender Code:

    template<typename T>
    class Foo
    {
    public:
        Foo::Foo() throw();
        Foo::Foo(const Foo& f) throw();   
        Foo::~Foo() throw();
    };
    
    int main()
    {
        return 0;
    }
    
    UniX:~/Desktop$ /usr/bin/g++-4.0 template.cpp
    template.cpp:5: error: explicit specialization of 'Foo<T>::Foo()' must be introduced by 'template <>'
    template.cpp:6: error: explicit specialization of 'Foo<T>::Foo(const Foo<T>&)' must be introduced by 'template <>'
    template.cpp:7: error: explicit specialization of 'Foo<T>::~Foo()' must be introduced by 'template <>'
    

    Lasse ich das "Foo::" bei den Ctors und Dtors weg(ist ja sowieso ueberfluessig),
    dann wird alles ohne Fehler compiled.

    Den alten g++-3.4 hat das "Foo::" noch nicht gestoert.
    Ich frage mich, was diese Aenderung fuer eine Intention hat.
    Hat jemand von euch eine Idee?



  • ich frage mich bloß, warum du deine konstruktoren so deklarierst 😕



  • Vermutlich geht es darum, den ISO C++ Standard umzusetzen. Aber die Foo:: Sachen sehen eh sehr Sinnbefreit aus. Daher lass sie doch einfach weg.



  • Das ist ein typisches Problem von g++-4.0. Oder eigentlich war es ein Problem von früheren Versionen. Dein Code ist nicht ANSI-Konform. Frühere Versionen haben das akzeptiert. G++-4.0 ist da strenger und verlangt korrekten Code.

    Alle Probleme, die g++-4.0 bei meinen Programmen gemeldet hat, waren tatsächlich unsaubere Formulierungen, die möglicherweise auch mit anderen Compilern aufgetreten wären. Die Korrekturen haben bewirkt, daß mein Code besser wurde und auch mit früheren Versionen kompatibel war.

    Tommi


Anmelden zum Antworten