Kopieren / Verschieben von Anforderungen für die Schlüssel- / Werttypen in einer std :: map?

Dieser Code verwirrt mich:

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;
}

Da ich dort keinen Fehler erhalte, scheint es, als würde beim Verschieben einer Karte kein Schlüsselobjekt erstellt (auch nicht zum Verschieben eines anderen Schlüsselobjekts).

Warum nicht? Kann ich mich auf dieses Verhalten gemäß dem C ++ 11-Standard verlassen?

Allgemeiner ausgedrückt: Welche Kopier- / Verschiebungsanforderungen gelten für astd::map platzieren auf derSchlüssel- und Werttypen und unter welchen bedingungen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage