Сообщение Как вернуть NonCopyable объект? от 24.12.2015 10:54
Изменено 24.12.2015 14:20 Basil2
Есть код:
Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.
Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать
class MyClass : NonCopyable {}
MyClass foo()
{
return MyClass();
}
Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.
Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
return {};
спасает ситуацию, но она в свою очередь не компилируется в MSVC 2010.Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать
Как вернуть NonCopyable объект?
Есть код:
Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.
Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать
UPD:
Проблема решена — добавлен конструктор перемещения.
class MyClass : NonCopyable {}
MyClass foo()
{
return MyClass();
}
Он прекрасно компилируется в MSVC 2010 и в Clang — видимо, срабатывает оптимизация возвращаемого значения и копирующий конструктор не требуется.
Однако код не компилируется в MSVC 2015 — пишет "referencing deleted function", указывая на копирующий конструктор. Конструкция
return {};
спасает ситуацию, но она в свою очередь не компилируется в MSVC 2010.Вопрос — как красиво выйти из ситуации, чтобы код собирался одновременно под 2010, 2015 и clang?
Условную компиляцию и отказ от noncopyable не предлагать
UPD:
Проблема решена — добавлен конструктор перемещения.