Можем ли мы вернуть объекты, имеющие удаленный / закрытый конструктор копирования / перемещения, по значению из функции?

В C ++ 03 невозможно вернуть объект класса, имеющий частный неопределенный конструктор копирования, по значению:

struct A { A(int x) { ... } private: A(A const&); };

A f() {
  return A(10); // error!
  return 10;    // error too!
}

Мне было интересно, снято ли это ограничение в C ++ 11 , что позволяет писать функции, имеющие тип возвращаемого значения типа класса, для классов без конструкторов, используемых для копирования или перемещения? Я помню, что было бы полезно разрешить вызывающим функциям использовать вновь возвращенный объект, но они не могут скопировать значение и где-нибудь его сохранить.

16
задан ildjarn 29 October 2011 в 16:48
поделиться