Sollte dieser Code nicht nach 12.8p2 im Standard kompiliert werden?

8

Dieser Code wird in VS2010 nicht kompiliert. Er gibt den Fehler C2440 aus: 'argument': kann nicht von 'A' in 'A & amp;' umwandeln, aber nach 12.8p2 im Standard ist A::A(A&) ein gültiger Kopierkonstruktor und a ist ein lvalue im Ausdruck A b = foo(a); in main() .

%Vor%     
Belloc 23.06.2013, 14:59
quelle

1 Antwort

2

Ich würde sagen, es kommt darauf an, von welchem ​​Standard man spricht. Nehmen wir C ++ 11 an, dann ist es in Ordnung, dass es in Ordnung sein sollte und folgendes Ergebnis liefern sollte:

%Vor%

Wie Sie darauf hinweisen, dass das a, das in foo übergeben wird, ein lvalue ist. Der Rückgabewert von foo ist jedoch ein rvalue und sollte daher entweder const A & amp; Kopieren Sie den Konstruktor (nicht vorhanden) im Fall pre C ++ 11 oder den Konstruktor move im Fall C ++ 11.

    
Bishop 24.06.2013 20:49
quelle

Tags und Links