nullptr conversion



  • Es fiel mir auf, als ich den Beitrag hier schrieb: http://www.c-plusplus.net/forum/p2426047#2426047
    Der Standard schreibt folgendes.

    §4.10/1 schrieb:

    A null pointer constant is an integer literal (2.14.2) with value zero or a prvalue of type std::nullptr_t.
    A null pointer constant can be converted to a pointer type;[...]. Such a conversion is called a null pointer conversion.

    Deswegen ist die Konvertierung nullptr -> Pointer eine standard conversion.
    Die gängige (und pre C++11-) Implementierung von std::nullptr_t, die zu Demonstrationszwecken gezeigt wird, hat einen Konvertierungsoperator zu jedem Pointer type. Die scheint jedoch falsch zu sein, schließlich ist ein Konvertierungsoperator eine user-defined conversion.
    Daraus folgt, dass folgender Code kompilieren sollte: http://ideone.com/sMa1C0
    foo wird zu std::nullptr konvertiert, was dann zu void* konvertiert wird. Ersteres ist eine user-defined conversion, letzteres eine standard conversion, das ist dann laut §13.3.3.1.2/1 eine user-defined conversion sequence.
    Bevor ich jetzt einen Bug report schreibe, kann das einer bestätigen und/oder mir sagen ob ich mit meiner Auslegung richtig liege?


  • Mod

    Die gängige (und pre C++11-) Implementierung von std::nullptr_t, die zu Demonstrationszwecken gezeigt wird, hat einen Konvertierungsoperator zu jedem Pointer type.

    Die ist nicht normativ. Trotzdem ist dein Befund richtig.

    Nur Schade dass ich den Report schon vor einer Minute abgeschickt habe. :p 🤡
    (Ich hätte erwartet dass der Bug schon reported wurde. Scheint er nicht zu sein)



  • Arcoth schrieb:

    Nur Schade dass ich den Report schon vor einer Minute abgeschickt habe. :p 🤡
    (Ich hätte erwartet dass der Bug schon reported wurde. Scheint er nicht zu sein)

    Auch gut, muss ich das nicht machen.



  • Sorry, will den Thread nicht entführen, aber wo schickt ihr so nen Bug Report hin?


  • Mod


Log in to reply