auto&: Referenz auf C-Arrays, standardgemäß?



  • Hallo zusammen, folgendes COdebeispiel:

    struct A
    {
      int iarr[30];
    };
    
    int main()
    {
      A a;
      auto& iarr_ref = a.iarr;
    }
    

    MSVC 2010 schluckt's. GCC 4.5.1 (ideone) auch.
    IMB's XLC for AIX 11.1 schreit:

    1540-0257 (S) An object or reference of type "int *&" cannot be initialized with an expression of type "int [30]".
    

    Frage: wer hat recht?



  • Falsche Typherleitung IMHO. Er sollte int(&)[30] deduzieren. Der Standard lässt die Array-to-pointer-conversion an der Stelle nur zu, wenn der Template-Parametertyp (die Regeln für auto verweisen auf die für Templates) keine Referenz ist.

    Disclaimer: Bin kein Experte, ich hab mir das nur gerade angelesen.

    Referenzen: n3242, §7.1.6.4, §14.8.2.3

    edit: Seit wann wird das Paragraph-Zeichen als Formatierung interpretiert?



  • MSVC & GCC haben Recht.

    Faustregel: Wenn MSVC + GCC dasselbe sagen, haben sie Recht. Wenn MSVC was anderes als GCC sagt, hat der GCC Recht, es sei denn, ein dritter Compiler gibt MSVC Recht. 🤡


Anmelden zum Antworten