File tree Expand file tree Collapse file tree 1 file changed +4
-6
lines changed
Expand file tree Collapse file tree 1 file changed +4
-6
lines changed Original file line number Diff line number Diff line change @@ -299,7 +299,7 @@ auto f10(J x) -> Widget& {
299299
300300## この機能が必要になった背景・経緯
301301
302- C++20までは戻り値型が参照型である場合に暗黙ムーブが行われていなかった。より正確には、関数戻り値の初期化時に戻り値構築のためのコンストラクタを選択するオーバーロード解決が行われる場合にのみ 、暗黙ムーブが考慮されていたが、戻り値型が参照型の場合は参照の初期化だけが起こりコンストラクタ呼び出しは関与しないため暗黙ムーブは考慮されていなかった。
302+ C++20までは戻り値型が参照型である場合に暗黙ムーブが行われていなかった。より正確には、関数戻り値の初期化時に初期化のためのコンストラクタを選択するオーバーロード解決が行われる場合にのみ 、暗黙ムーブが考慮されていたが、戻り値型が参照型の場合は参照の初期化だけが起こりコンストラクタ呼び出しは関与しないため暗黙ムーブは考慮されていなかった。
303303
304304これによって、同じ`return`文でも戻り値型が異なることでそのオペランドの扱いが変化してしまっていた。
305305
@@ -318,9 +318,7 @@ auto g(Widget&& w) -> Widget&& {
318318
319319この非一貫性を解消することがまず求められていた。
320320
321- また、C++20時点の暗黙ムーブの使用は二段階のオーバーロード解決を行う複雑なものであり、暗黙ムーブが行われるかどうかについて実装間で挙動に差異が生じていた。
322-
323- C++20の仕様は次のようになっていた。
321+ また、C++20時点の暗黙ムーブの使用は二段階のオーバーロード解決を行う複雑なものであり、暗黙ムーブが行われるかどうかについて実装間で挙動に差異が生じていた。C++20時点の暗黙ムーブの仕様は次のようになっていた
324322
325323暗黙ムーブ可能なエンティティが次のコピー初期化が行われる場所で指名されている場合、コピーの代わりにムーブが使用される場合がある
326324
@@ -334,9 +332,9 @@ C++20の仕様は次のようになっていた。
3343321 . オペランドのid式を右辺値(* rvalue* )としてオーバーロード解決を実行する
3353332 . 1が失敗した(もしくは行われなかった)場合、オペランドのid式を左辺値(* lvalue* )としてオーバーロード解決を実行する
336334
337- この最後の手順の1回目のオーバーロード解決時にコピーコンストラクタの代わりにムーブコンストラクタが選択されることによって、C++20の暗黙ムーブは達成されていた 。しかし、この手順2における 「失敗」という言葉の意味が明確ではなく、それによって実装間で暗黙ムーブが行われるかどうか、あるいは選択されるコンストラクタに差異が生じていた。
335+ この最後の手順の1回目のオーバーロード解決時にコピーコンストラクタの代わりにムーブコンストラクタが選択されることによって、C++20の暗黙ムーブは実行される 。しかし、この手順における 「失敗」という言葉の意味が明確ではなく、それによって実装間で暗黙ムーブが行われるかどうか、あるいは選択されるコンストラクタに差異が生じていた。
338336
339- ` return ` 文オペランドの扱いの戻り値型の違いによる非一貫性と、使用の複雑さと曖昧さによる実装間の差異の2つの問題を解決するために 、C++23ではムーブする資格がある式という概念を用いて暗黙ムーブの仕様が単純化された。
337+ ` return ` 文オペランドの扱いの戻り値型の違いによる非一貫性と、仕様の複雑さと曖昧さによる実装間の差異の2つの問題を解決するために 、C++23ではムーブする資格がある式という概念を用いて暗黙ムーブの仕様が単純化された。
340338
341339## 参照
342340
You can’t perform that action at this time.
0 commit comments