MSVC unterstützen



  • Hallo,

    Da sich User meines Codes bei mir beschweren, dass er mit Microsoft Schrott-Compiler™ nicht kompiliert, möchte ich die betroffenen Stellen überarbeiten.
    Hat jemand eine Idee, wieso der folgende, korrekte C++11-Code unter MSVC (2015) nicht kompiliert? http://rextester.com/BMPC15389
    Gibt es allgemeine Tipps, wie man seinen standardkonformen C++11-Code gestalten soll, dass er auch von viertklassigen Compilern kompiliert werden kann?

    LG



  • Sind wir hier im Kindergarten? Der Microsoft Compiler ist mittlerweile sehr gut. Microsoft Bashing find ich in der Hinsicht überhaupt nicht mehr cool.

    Bei mir kompilierts mit VS 2017. 2015 hab ich nicht mehr drauf, aber da wurden auch nicht alle constexpr Features unterstützt. Ist aber alles ausführlich dokumentiert. Ist mittlerweile aber auch egal, einfach 2017 nehmen.



  • Mechanics schrieb:

    Der Microsoft Compiler ist mittlerweile sehr gut. Microsoft Bashing find ich in der Hinsicht überhaupt nicht mehr cool.

    Das Bashing war zugegeben ein bisschen überspitzt, aber dass der Compiler von 2015 den Standard von 2011 nicht unterstützt und bei einer trivialen integer_sequence Implementierung abschmiert, ist schon sehr ärgerlich.

    Mechanics schrieb:

    2015 hab ich nicht mehr drauf, aber da wurden auch nicht alle constexpr Features unterstützt.

    constexpr ist nicht das Problem hier. Entfernt man in meinem Code die Zeile mit constexpr , so stürzt der Compiler noch immer ab. Das Problem sind allem Anschein nach die Variadischen Templates, die VS2015 nicht unterstützt.

    Mechanics schrieb:

    Ist mittlerweile aber auch egal, einfach 2017 nehmen.

    Nein, das ist für meinen User keine Option. In Firmen kann man sich oft nicht aussuchen, welchen Compiler man nutzt und kann diesen auch nicht nach Lust und Laune austauschen.



  • VC++ 2015 scheint das Spezialisieren verschachtelter Templates nicht zu mögen. Wenn du den helper<> aus make_integer_sequence_impl<> rausziehst (also die ganze Klasse, nicht nur die Spezialisierung), dann gehts.

    (Ich wußte gar nicht, daß man verschachtelte Klassentemplates in-place spezialisieren darf.)



  • audacia schrieb:

    VC++ 2015 scheint das Spezialisieren verschachtelter Templates nicht zu mögen. Wenn du den helper<> aus make_integer_sequence_impl<> rausziehst (also die ganze Klasse, nicht nur die Spezialisierung), dann gehts.

    Vielen Dank! Hat mein Problem gelöst.



  • audacia schrieb:

    VC++ 2015 scheint das Spezialisieren verschachtelter Templates nicht zu mögen.

    Auch wenn der MSVC2015 sonst gute Arbeit macht, habe ich den Eindruck dass etwas komplexere Template-Sachen nicht gerade seine Stärke sind: Wenn ich an den sehr TMP-lastigen Teilen meines Codes arbeite, dann sehe ich überproportional häufig solche "INTERNAL COMPILER ERROR". Meistens liegts zwar an mir, weil der Template-Ausdruck nicht korrekt war, dass er dabei aber so oft wenig würdevoll vor die Wand läuft, lässt schon erahnen, dass bei der Template-Verarbeitung noch einiges im argen liegt. Werde demnächst auch auf die 2017er-Version umsteigen, Mechanics' Post macht Hoffnung dass sich diesbezüglich was getan hat.



  • Finnegan schrieb:

    Wenn ich an den sehr TMP-lastigen Teilen meines Codes arbeite, dann sehe ich überproportional häufig solche "INTERNAL COMPILER ERROR". Meistens liegts zwar an mir, weil der Template-Ausdruck nicht korrekt war, dass er dabei aber so oft wenig würdevoll vor die Wand läuft, lässt schon erahnen, dass bei der Template-Verarbeitung noch einiges im argen liegt.

    Die Erfahrung teile ich. Ich habe mir deshalb eine zusätzliche Buildkonfiguration eingerichtet, die das Clang/C2-Toolkit verwendet. Das ist nicht nur bei ICEs eine große Hilfe, sondern auch, wenn ich die Fehlermeldung nicht verstehe (was bei beiden Compilern vorkommt).

    VS 2017 ist in bezug auf vormals schwierige Angelegenheiten wie constexpr und variable templates deutlich besser geworden.



  • Das ist leider richtig, in VS 2015 ist der Compiler bei irgendwelchen Template Fehlern sehr oft einfach abgestürzt. Das musste nicht mal etwas total exotisches sein, falsche Parameter bei boost::bind haben teilweise schon gereicht.
    Bei VS 2017 ist es anscheinend viel besser geworden, hab in letzter Zeit keine Abstürze mehr beobachtet.



  • Das Problem ist, dass ihr C++ aufs übelste missbraucht und euch dann wundert warum nix mehr geht.



  • Kann man nichts machen...



  • reil schrieb:

    Das Problem ist, dass ihr C++ aufs übelste missbraucht und euch dann wundert warum nix mehr geht.

    Nein, das Problem ist ein Bug im Compiler.


Anmelden zum Antworten