Я пытаюсь использовать этот код, чтобы продемонстрировать использование copy-constructor. Моя презумпция заключалась в том, что когда у меня есть функция, возвращающая значение, мой компилятор будет по умолчанию выполнять перемещение объекта. Но когда конструктор move недоступен, компилятор будет копировать вместо него (в С++ 03 компилятор будет копировать при возврате по значению). Итак, почему в следующем примере компилятор пытается вызвать явно удаленный move-constructor вместо доступного конструктора-копии? Я компилирую это в GCC 4.7.2.
struct S
{
S() = default;
S(S const &) = default;
S(S&&) = delete;
};
S f() { return S{}; }
int main()
{
f();
}
prog.cpp: В функции
‘S f()’
:
prog.cpp: 8: 18: ошибка: использование удаленной функции‘S::S(S&&)’
prog.cpp: 5: 5: error: заявлено здесь