В C ++ 03 невозможно вернуть объект класса, имеющий частный неопределенный конструктор копирования, по значению:
struct A { A(int x) { ... } private: A(A const&); };
A f() {
return A(10); // error!
return 10; // error too!
}
Мне было интересно, снято ли это ограничение в C ++ 11 , что позволяет писать функции, имеющие тип возвращаемого значения типа класса, для классов без конструкторов, используемых для копирования или перемещения? Я помню, что было бы полезно разрешить вызывающим функциям использовать вновь возвращенный объект, но они не могут скопировать значение и где-нибудь его сохранить.