C ++ 11 «Неподвижный» тип [дубликат]

Возможный дубликат:
Почему C ++ 11-удаленные функции участвуют в разрешении перегрузки?

У меня есть два вопроса о следующем коде 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;
}

Я получаю следующие ошибки компиляции с gcc и 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

clang-3.0 (clang ++ --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.
Разве компилятор не должен использовать конструктор копирования, если конструктор перемещения явно удален?Кто-нибудь знает какое-либо использование для «неподвижных» типов?

Заранее спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос