Questo frammento è stato compilato senza errori in Visual Studio 2013 (versione 12.0.31101.00 Aggiornamento 4)C++ Compiler errore C2280 "il tentativo di fare riferimento a una funzione eliminata" in Visual Studio 2013 e il 2015
class A
{
public:
A(){}
A(A &&){}
};
int main(int, char*)
{
A a;
new A(a);
return 0;
}
mentre viene compilato con questo errore in Visual Studio 2015 RC (versione 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 ==========
credo che il compilatore fornito con Visual Studio 2015 genera il costruttore di copia e lo contrassegna come =delete
e così ottengo l'errore C2280 (che, a proposito, non riesco a trovare documentato su msdn.microsoft.com).
Ora, diciamo che ho un codebase che è compilabile con Visual Studio 2013 (e funziona perché si basa sul codice generato automaticamente dal compilatore) ma non è compilabile con Visual Studio 2015 a causa di C2280, come posso risolvere il problema?
Stavo pensando di dichiarare classe A
in questo modo:
class A
{
public:
A(){}
A(A &&){}
A(const A&)=default;
};
mi sto perdendo qualcosa?
Insieme a quello "A & operator = (A &&) ;" e "A & operator = (const A &);" – Jagannath