Powiel możliwe:
Why do C++11-deleted functions participate in overload resolution?C++ 11 "Non-ruchomy" typ
Mam dwa pytania dotyczące następującego kodu C++ 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;
}
Otrzymuję następujące błędy kompilacji z gcc i clang
GCC-4.7.2 (g ++ --std = C++ 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
szczęk-3,0 (szczęk ++ --std = C++ 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.
- Czy kompilator nie powinien używać konstruktora kopiowania, jeśli konstruktor ruchu został jawnie usunięty?
- Czy ktoś wie, że można użyć dowolnego typu "nie ruchomego"?
Z góry dziękuję.
http://stackoverflow.com/questions/14085620/why-do-c11-deleted-functions-participate-in-overload-resolution – paulm
Zastanawiam się, w jaki sposób zwrócić obiekt lokalny, jeśli 'A (A &&)' jest usunięty. – Nawaz
Właściwie to było moje pierwsze pytanie, czy kompilator nie powinien wybrać konstruktora kopiowania zamiast konstruktora ruchu, gdy konstruktor ruchu zostanie jawnie usunięty? (Rozumiałem, że usunięte funkcje są rozpatrywane w rozdzielczości przeciążenia). – lucasmrod