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