Title
Defaulted vs deleted copy constructors/assignment operators
Status
open
Section
11.4.5.3 [class.copy.ctor]
Submitter
Andrew Rogers

Created on 2021-02-04.00:00:00 last changed 5 months ago

Messages

Date: 2021-02-04.00:00:00

According to 11.4.5.3 [class.copy.ctor] paragraph 6,

If the class definition does not explicitly declare a copy constructor, a non-explicit one is declared implicitly. If the class definition declares a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted; otherwise, it is defined as defaulted (9.5 [dcl.fct.def]).

However, this rule is contradicted by paragraph 10, which lists a number of other reasons why a defaulted copy constructor will be defined as deleted, rather than being “defined as defaulted,” as required by paragraph 6:

A defaulted copy/move constructor for a class X is defined as deleted (9.5.3 [dcl.fct.def.delete]) if X has:

  • ...

A similar contradiction exists for copy assignment operators in 11.4.6 [class.copy.assign] paragraphs 2 and 7.

History
Date User Action Args
2021-02-04 00:00:00admincreate