Erro do compilador C ++ C2280 "tentando referenciar uma função excluída" no Visual Studio 2013 e 2015
Este trecho é compilado sem erros no Visual Studio 2013 (Versão 12.0.31101.00, atualização 4)
class A
{
public:
A(){}
A(A &&){}
};
int main(int, char*)
{
A a;
new A(a);
return 0;
}
enquanto é compilado com este erro no Visual Studio 2015 RC (versão 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 ==========
Eu acho que o compilador enviado com o Visual Studio 2015 gera o Copy Constructor e o marca como=delete
e, por isso, recebo o erro C2280 (que, a propósito, não consigo encontrar documentado em msdn.microsoft.com).
Agora, digamos que eu tenha uma base de código compilável com o Visual Studio 2013 (e funcione porque depende do código gerado automaticamente pelo compilador), mas não compilável com o Visual Studio 2015 devido ao C2280, como posso corrigir o problema?
Eu estava pensando em declarar classeA
nesse caminho:
class A
{
public:
A(){}
A(A &&){}
A(const A&)=default;
};
estou esquecendo de algo?