オブジェクトが移動可能であってはならないため、移動割り当てが明示的に削除されるクラスがあります。私はRVOを使用して、このクラスのインスタンスに割り当てた場合でも、コンパイラは私にエラーを与える:コンパイラはコピー代入を使用しません。
main.cpp:12:16: note: candidate function has been explicitly deleted
もコンパイラは、既存のコピー代入演算子を言及されたが、それを使用していません。
class foo {
public:
foo() {}
foo(foo const& r) {}
foo(foo&&) = delete;
foo const& operator=(foo const& r) { return *this; }
foo const& operator=(foo&& r) = delete;
};
int main(int argc, char **argv) {
foo bar;
bar = foo();
return 0;
}
は、私は非常に似ポスト
hereが見つかりました:
は、ここに私のコード(または()実行していない例here)です。
私は一時的な使用を避けることができます。なぜ私はすべてのコンパイラ(私はgcc、clangとvs2013でこれをテストした)は、既存のコピーの割り当てを直接呼び出すことができないのだろうか?私が紛失しているものはありますか?
移動代入演算子は良く一致しています。それは削除されたとみなす前に起こります。 – chris
削除された関数は、オーバーロードの解決に関与します。 – 101010
ちょうど移動assingmentを削除しないでくださいすべてが良いでしょう。移動していないものが存在すると、デフォルトが禁止されます。好奇心から外に – SergeyA