Wymagania dotyczące kopiowania / przenoszenia typów kluczy / wartości na mapie std ::?

Ten kod mnie myli:

struct foo {
  int i;

  foo(int j) : i(j) {}

  foo(const foo &) = delete;
  foo(foo &&) = delete;
  foo &operator=(const foo&) = delete;
  foo &operator=(foo&&) = delete;
};

bool operator<(const foo &f1, const foo &f2)
{
  return f1.i < f2.i;
}

int main(int argc, char **argv)
{
  std::map<foo,int> f;
  std::map<foo,int> f2 = f; //error (as expected)
  std::map<foo,int> f3 = std::move(f); //no error (why?)
  return 0;
}

Ponieważ nie mam tam żadnego błędu, wydaje się, że podczas przesuwania mapy nie jest tworzony żaden kluczowy obiekt (nawet dla przeniesienia do niego innego kluczowego obiektu).

Dlaczego nie? Czy mogę polegać na tym zachowaniu zgodnie ze standardem C ++ 11?

Bardziej ogólnie, jakie są wymagania dotyczące kopiowania / przenoszeniastd::map miejsce natypy kluczy i wartości i pod jakimi warunkami?

questionAnswers(2)

yourAnswerToTheQuestion