Информация об изменениях

Сообщение Как вернуть NonCopyable объект? от 24.12.2015 10:54

Изменено 24.12.2015 14:20 Basil2

Есть код:

class MyClass : NonCopyable {}

MyClass foo()
{
    return MyClass();
}

Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.

Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
return {};
спасает ситуацию, но она в свою очередь не компилируется в MSVC 2010.

Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать
Как вернуть NonCopyable объект?
Есть код:

class MyClass : NonCopyable {}

MyClass foo()
{
    return MyClass();
}

Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.

Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
return {};
спасает ситуацию, но она в свою очередь не компилируется в MSVC 2010.

Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать


UPD:
Проблема решена — добавлен конструктор перемещения.