Отключить «удаление конструктора копирования, когда доступен конструктор перемещения» в Clang - PullRequest
0 голосов
/ 10 января 2012

Посмотрев здесь на StackOverflow, я обнаружил, что в Clang ++ при использовании стандарта C ++ 11, если вы определили конструктор перемещения для своего класса, неявная генерация конструктора отключена, то есть конструктор копирования «эксплицирован удален».

Есть ли способ отключить это поведение?

Кроме того, стандартизировано ли это поведение?Потому что у меня нет такого поведения в GCC.

1 Ответ

8 голосов
/ 10 января 2012

Есть ли способ отключить это поведение?

Нет. Но вы всегда можете:

A(const A&) = default;

Хотя я не уверен, что clang в настоящее время полностью реализует конструкторы копирования по умолчанию.

Кроме того, стандартизировано ли это поведение?

Да. [Class.copy] / p7:

Если определение класса явно не объявляет копию конструктор, один объявлен неявно. Если определение класса объявляет конструктор перемещения или оператор присваивания перемещения, неявно объявленный конструктор копирования определяется как удаленный; ...

...

Потому что у меня нет такого поведения в GCC.

Какая версия? Я бы догадался, что последняя версия gcc имеет то же поведение, что и clang. Но у меня нет его для экспериментов.

...