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.
