このコードは、私を混乱させる:std :: mapのキー/値タイプの要件をコピー/移動しますか?
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;
}
私はそこには、エラーを取得していないので、それは(いなくても、そこに別のキーオブジェクトを移動するための)どのキーオブジェクトが作成されていないマップを移動するときのように思えます。
どうしてですか? C++ 11標準に従ってこの動作に頼ることができますか?
は、より一般的には、どのようなコピー/要件を移動すると、キーと値の種類とどのような条件の下でstd::map
場所のでしょうか?
地図を移動すると_no_要件がキーと値に配置されます。 –
@MooingDuck、アロケータのタイプが –
ああ伝播しない場合はそうではありません。アロケータはすべてを混乱させる可能性があります。 –