C++ Compiler-Fehler C2280 "Versuch zum Verweis auf eine gelöschte Funktion" in Visual Studio 2013 und 2015

Diesem snippet kompiliert, ohne Fehler in Visual Studio 2013 (Version 12.0.31101.00 Update 4)

class A
{
public:
   A(){}
   A(A &&){}
};

int main(int, char*)
{
   A a;
   new A(a);
   return 0;
}

während der Kompilierung mit dieser Fehlermeldung in Visual Studio 2015 RC (Version 14.0.22823.1 D14REL):

1>------ Build started: Project: foo, Configuration: Debug Win32 ------
1>  foo.cpp
1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function
1>  c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ich denke, dass der compiler die im Lieferumfang von Visual Studio 2015 erzeugt der Copy-Konstruktor und markiert Sie als =delete und so bekomme ich die Fehlermeldung C2280 (die, übrigens, ich finde nicht dokumentiert msdn.microsoft.com).

Nun, sagen wir, ich habe eine Codebasis, die kompilierbare mit Visual Studio 2013 (und es funktioniert, weil es setzt auf die code automatisch generiert vom compiler) aber nicht kompilierbar mit Visual Studio 2015 aufgrund C2280, wie kann ich das problem beheben?

Dachte ich, zu erklären-Klasse A auf diese Weise:

class A
{
public:
   A(){}
   A(A &&){}
   A(const A&)=default;
};

bin ich etwas fehlt?

InformationsquelleAutor der Frage Alessandro Jacopson | 2015-07-07

Schreibe einen Kommentar