В запросе я использовал код, похожий на следующий:
class C {
public:
C() {}
C(const C&) = delete;
};
C f() {
return C();
}
int main() {
f();
}
В каждом предыдущем компиляторе Visual С++ я использовал (до 2013 года), что никогда не было проблемой. Но когда я пытаюсь скомпилировать его с новым компилятором Visual С++ 2015, я получаю следующую ошибку:
1>c:\devel\c++11\playground\main.cpp(10): error C2280: 'C::C(const C &)': attempting to reference a deleted function
1> c:\devel\c++11\playground\main.cpp(6): note: see declaration of 'C::C'
Я не уверен, почему он работал ранее, но я предполагаю, что из-за оптимизации значения возвращаемого значения был вызван конструктор по умолчанию, а не конструктор копирования.
Является ли код, который я использовал даже законным С++? А если нет, то каков был бы правильный способ реализации этого кода, не требуя конструктора копирования для моего класса C
? Я мог бы, конечно, использовать конструктор перемещения, но потом я предполагаю, что код никогда не был бы допустимым С++ до С++ 11?