MSVC und unique_ptr



  • Hm, hab die Version gar nicht genannt 🙄 Es handelt sich um MSVC 10. Der ist nicht ganz bleeding-edge, aber er bringt diese Features immerhin mit, und es wundert mich einfach, dass anscheinend noch keinem aufgefallen ist, dass sie nicht funktionieren.



  • Ja, das ist schon komisch. Ich hätte auch gedacht, dass die 2010er Version aktuell genug sein sollte. Vielleicht doch noch irgendwo ein Anwenderfehler in den Einstellungen? Ich selbst verwende diesen Compiler z.Z. nicht.



  • Also bei mir funktioniert das auch unter MSVC 10 ohne Probleme.

    Du kannst den Fall ja nocheinmal besser beschreiben (inklusive der verwendeten Header und der Fehlermeldungen vom Compiler). Evtl klärt sich der Fall dann auf.



  • Bashar schrieb:

    unique_ptr<int> foo()
    {
      return unique_ptr<int>(new int(42));
    }
    

    Er beschwert sich über einen nicht zugänglichen, da privaten, Kopierkonstruktor.

    Benutzt du die Funktion irgendwo? Welche Standard-Bibliothek? Welche MSVC-Version?



  • Oh, ich habs. "Disable language extensions" war an. Ich hatte die Option eigentlich als "Halte dich an den Standard" interpretiert, also entweder C++98, d.h. rvalue-Referenzen gibts nicht, oder C++11 bzw. 0x, d.h. sie werden korrekt oder zumindest so gut wie möglich unterstützt. Er hat sich da für einen Mittelweg entschieden ...



  • Bashar schrieb:

    entweder C++98, d.h. rvalue-Referenzen gibts nicht, oder [...] Er hat sich da für einen Mittelweg entschieden ...

    Welcher Mittelweg wäre das? Ich würde das als C++98 language ohne die "Teilwweise-C++0x-extension" (und andere extensions) interpretieren.
    IRRC hat MSVC in den Bibliotheken auch überall #ifdefs um die Funktionen, die rrefs und andere C++0x Sprach-Features benutzen. Die Bilbiotheksfeatures sind was anderes - Wie man sieht funktionieren einige neue Teile der Bibliotheken durchaus auch ohne die neuen Sprachfeatures. Dass einige wie std::unique_ptr dann nur sehr eingeschränkt benutzbar sind steht auf einem anderen Blatt 😉



  • pumuckl schrieb:

    Bashar schrieb:

    entweder C++98, d.h. rvalue-Referenzen gibts nicht, oder [...] Er hat sich da für einen Mittelweg entschieden ...

    Welcher Mittelweg wäre das?

    Der Mittelweg zwischen geht nicht und geht ist: geht falsch 🙂

    Ich würde das als C++98 language ohne die "Teilwweise-C++0x-extension" (und andere extensions) interpretieren.

    In C++98 wäre eine rvalue-Referenz ein Syntaxfehler. Ich kann sie aber zunächst ohne Probleme benutzen, meine eigene Klasse mit Movekonstruktor hat auch funktioniert, deshalb bin ich gar nicht auf die Idee gekommen, dass es an dieser Einstellung liegen könnte.



  • Bashar schrieb:

    Könntet ihr bitte beim Thema bleiben?

    Verstehe ich nicht, ich habe doch geschrieben, dass es bei mir so funktioniert. Oder habe ich das Problem nicht verstanden?



  • cooky451 schrieb:

    Verstehe ich nicht, ich habe doch geschrieben, dass es bei mir so funktioniert. Oder habe ich das Problem nicht verstanden?

    Tut mir leid, das war eher an Ethon gerichtet, auf den du geantwortet hast, und ich hatte dein Posting nicht als MSVC-spezifisch erkannt. Dass es irgendwo funktioniert, weiß ich auch, auf dem gcc (ideone) z.B.



  • Bashar schrieb:

    cooky451 schrieb:

    Verstehe ich nicht, ich habe doch geschrieben, dass es bei mir so funktioniert. Oder habe ich das Problem nicht verstanden?

    Tut mir leid, das war eher an Ethon gerichtet, auf den du geantwortet hast, und ich hatte dein Posting nicht als MSVC-spezifisch erkannt. Dass es irgendwo funktioniert, weiß ich auch, auf dem gcc (ideone) z.B.

    Ich dachte dass du meintest dass das zweite Beispiel mit dem MSVC kompiliert aber das erste nicht. Dafür hab ich ne Vermutung abgegeben, mehr nicht. 😉


Anmelden zum Antworten