Home >Backend Development >C++ >Why Does Visual Studio 2015 Throw Error C2280 \'attempting to reference a deleted function\' When Compiling Code That Works in Visual Studio 2013?
C Compiler Error C2280 "attempting to reference a deleted function" in Visual Studio 2013 and 2015
The C compiler in Microsoft Visual Studio 2013 and 2015 handles copy constructors and assignment operators differently.
Visual Studio 2013
If a copy constructor or move assignment operator is not explicitly declared in the class definition, the compiler will implicitly generate them.
Visual Studio 2015
However, in Visual Studio 2015, if a class definition includes a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted.
Problem Statement
The following code compiles successfully in Visual Studio 2013 but generates error C2280 in Visual Studio 2015:
<code class="cpp">class A { public: A(){} A(A &&&) {} }; int main(int, char*) { A a; new A(a); return 0; }</code>
C2280: 'A::A(const A &)' attempting to reference a deleted function
Resolution
To fix this error in Visual Studio 2015, one needs to explicitly declare the copy constructor and move assignment operator, or use the default constructor:
Option 1: Explicitly Declare Copy Constructor and Move Assignment Operator
<code class="cpp">class A { public: A(){} A(A &&&) {} A(const A&) = default; // Default copy constructor A& operator=(const A&) = default; // Default move assignment operator };</code>
Option 2: Define Class as Deleted or Incomplete
<code class="cpp">class A { public: A(){} A(A &&&) = delete; // Mark copy constructor as deleted A(const A&); // Incomplete constructor (cannot be instantiated) A& operator=(const A&); // Incomplete assignment operator (cannot be instantiated) };</code>
The above is the detailed content of Why Does Visual Studio 2015 Throw Error C2280 \'attempting to reference a deleted function\' When Compiling Code That Works in Visual Studio 2013?. For more information, please follow other related articles on the PHP Chinese website!