Skip to content

Commit 81b8f37

Browse files
committed
暗黙ムーブ : 表を拡充 #1021
1 parent 0c64616 commit 81b8f37

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

lang/cpp23/simpler_implicit_move.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,20 @@ auto f() -> int&& {
164164

165165
任意の型名を`T``T&&`は右辺値参照型)として、戻り値型推論とコンパイル可否の変化は次のようにまとめられる
166166

167-
|関数宣言と`return`|C++20|C++23|
168-
|---|---|---|
169-
|`auto f(T x) -> decltype(x) { return x; }` |`T` : 〇|`T` : 〇|
170-
|`auto f(T x) -> decltype((x)) { return (x); }` |`T&` : 〇|`T&` : **×**|
171-
|`auto f(T x) -> decltype(auto) { return x; }` |`T` : 〇|`T` : 〇|
172-
|`auto f(T x) -> decltype(auto) { return (x); }` |`T&` : 〇|**`T&&` :**|
173-
|`auto f(T&& x) -> decltype(x) { return x; }` |`T&&` : ×|`T&&` : ****|
174-
|`auto f(T&& x) -> decltype((x)) { return (x); }` |`T&` : 〇|`T&` : **×**|
175-
|`auto f(T&& x) -> decltype(auto) { return x; }` |`T&&` : ×|`T&&` : ****|
176-
|`auto f(T&& x) -> decltype(auto) { return (x); }`|`T&` : 〇|**`T&&` :**|
167+
|関数宣言と`return`|C++20まで|C++23から|備考|
168+
|---|---|---|---|
169+
|`auto f(T x) -> decltype(x) { return x; }` |`T` : 〇|`T` : 〇||
170+
|`auto f(T x) -> decltype((x)) { return (x); }` |`T&` : 〇|`T&` : **×**|ローカル参照を返していた|
171+
|`auto f(T x) -> decltype(auto) { return x; }` |`T` : 〇|`T` : 〇||
172+
|`auto f(T x) -> decltype(auto) { return (x); }` |`T&` : 〇|**`T&&` :**|ローカル参照を返す|
173+
|`auto f(T&& x) -> decltype(x) { return x; }` |`T&&` : ×|`T&&` : ****|`x`がローカル変数の場合ローカル参照を返す|
174+
|`auto f(T&& x) -> decltype((x)) { return (x); }` |`T&` : 〇|`T&` : **×**|`x`がローカル変数の場合ローカル参照を返していた|
175+
|`auto f(T&& x) -> decltype(auto) { return x; }` |`T&&` : ×|`T&&` : ****|`x`がローカル変数の場合ローカル参照を返すようになる|
176+
|`auto f(T&& x) -> decltype(auto) { return (x); }`|`T&` : 〇|**`T&&` :**|`x`がローカル変数の場合ローカル参照を返す|
177+
|`auto f(T x) -> auto&& { return x; }` |`T&` : 〇|`T&&` : 〇|ローカル参照を返す|
178+
|`auto f(T x) -> auto&& { return (x); }` |`T&` : 〇|`T&&` : 〇|ローカル参照を返す|
179+
|`auto f(T&& x) -> auto&& { return x; }` |`T&` : 〇|**`T&&` :**|`x`がローカル変数の場合ローカル参照を返す|
180+
|`auto f(T&& x) -> auto&& { return (x); }` |`T&` : 〇|**`T&&` :**|`x`がローカル変数の場合ローカル参照を返す|
177181

178182
右側2列の各項目内は、推論される戻り値型:コンパイル可否、のように記述しており、コンパイル可否は、〇が適格(コンパイルが通る)、×が不適格(コンパイルエラー)を表す。
179183

0 commit comments

Comments
 (0)