Возможный дубликат:
Почему С++ 11-удаленные функции участвуют в разрешении перегрузки?
У меня есть два вопроса о следующем коде С++ 11:
#include <iostream>
using namespace std;
struct A {
A() { cout << "Default c-tor" << endl; }
A(const A&) { cout << "Copy c-tor" << endl; }
A(A&&) = delete;
};
A f()
{
A a;
return a;
}
int main()
{
A b = f();
return 0;
}
Я получаю следующие ошибки компиляции с помощью gcc и clang
gcc-4.7.2 (g++ --std = С++ 11 main.cpp):
main.cpp: In function ‘A f()’:
main.cpp:16:9: error: use of deleted function ‘A::A(A&&)’
main.cpp:8:2: error: declared here
main.cpp: In function ‘int main()’:
main.cpp:21:10: error: use of deleted function ‘A::A(A&&)’
main.cpp:8:2: error: declared here
clang-3.0 (clang++ --std = С++ 11 main.cpp):
main.cpp:19:4: error: call to deleted constructor of 'A'
A b = f();
^ ~~~
main.cpp:8:2: note: function has been explicitly marked deleted here
A(A&&) = delete;
^
1 error generated.
- Должен ли компилятор использовать конструктор копирования, если конструктор перемещения явно удален?
- Кто-нибудь знает, что использовать для "непередвижных" типов?
Спасибо заранее.