オブジェクトを値で関数に渡すとき、コピーの省略がないと仮定して、移動コンストラクターがあれば常に呼び出されることを私は知っています。オブジェクトを値で返すのはどうですか?
たとえばFoo
、move コンストラクタを持つクラスがあり、オブジェクトを返す関数があるとしFoo
ます。
Foo g() {
Foo f;
// do something with f
return f;
}
RVO がないと仮定すると、move コンストラクターが呼び出されることが保証されますか?
更新: 意図を明確に示さなかったと思います。最悪の場合、オブジェクトをコピーせずに移動できることを知りたいだけです。RVO か NRVO のいずれかが発生し、私は満足しています。また、move コンストラクターと move 代入は削除されておらず、適切に実装されているとも言えます。