Annex C (informative) Compatibility [diff]

C.1 C++ and ISO C [diff.iso]

C.1.9 Clause [special]: special member functions [diff.special]

[class.copy]
Изменение: Копирование летучих объектов.

Неявно объявленный конструктор копии и неявно объявленный оператор присваивания копии не могут сделать копию изменчивого lvalue. Например, в ISO C действует следующее:

struct X { int i; };
volatile struct X x1 = {0};
struct X x2 = x1;               // invalid C++
struct X x3;
x3 = x1;                        // also invalid C++


Обоснование: Подробно обсуждалось несколько альтернатив. Изменение параметра на volatile const X& значительно усложнит создание эффективного кода для объектов класса. Обсуждение предоставления двух альтернативных сигнатур для этих неявно определенных операций вызвало безответные опасения по поводу создания двусмысленностей и усложнения правил, определяющих формирование этих операторов в соответствии с базами и членами.
Влияние на исходный объект: удаление семантически четко определенного объекта.
Сложность преобразования: семантическое преобразование. Если для копии требуется изменчивая семантика, необходимо предоставить конструктор или присваивание, объявленный пользователем. Если требуется энергонезависимая семантика,const_­cast можно использовать явную .
Насколько широко используется: редко.