decay-copy
From cppreference.com
template< class T > typename std::decay<T>::type decay-copy( T&& value ); |
(C++11以降) (C++20まで) (説明用*) |
|
| template< class T > requires std::convertible_to<T, std::decay_t<T>> |
(C++20以降) (説明用*) |
|
valueのprvalueコピーである、型が変換された(decayされた)std::forward<T>(value)を返します。
目次 |
[編集] パラメーター
| value | - | コピーされる値 |
[編集] 戻り値
valueの、decayされたprvalueコピー。
[編集] 備考
decay-copyはLWG issue 929の解決により導入されました。当初は並行処理サポートライブラリにおいて、引数を値渡しする際にdecayされることを保証するために使用され、後にレンジライブラリで使用されました。
C++23で導入された言語機能auto(x)も、prvalueとしてdecayされたコピーを作成することを可能にします。唯一の違いは、decay-copyは常にvalueを実体化し、コピーを生成するのに対し、auto(expr)はexprがprvalueであればno-opである点です。
views::all、ranges::take_view、ranges::drop_viewを除く標準ライブラリにおけるdecay-copyの全ての使用箇所(以下参照)は、C++23以降auto(x)に置き換えられています。
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3724 | C++20 | decay-copyが制約されていなかった。 |
制約付き |
[編集] 関連項目
新しい thread オブジェクトを構築する( std::threadの公開メンバ関数) | |
新しい jthread オブジェクトを構築する( std::jthreadの公開メンバ関数) | |
| (C++11) |
関数を非同期に(場合によっては新しいスレッドで)実行し、結果を保持する std::future を返す (関数テンプレート) |
| (C++20) |
rangeの先頭を指すイテレータを返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeの終端を示す番兵を返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeへの逆イテレータを返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeへの逆終端イテレータを返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeのサイズと等しい整数を返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
連続rangeの先頭へのポインタを取得する (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeのすべての要素を含む view(エイリアステンプレート) (rangeアダプタオブジェクト) |
| (C++20) |
別のviewの最初のN個の要素からなる view(クラステンプレート) (rangeアダプタオブジェクト) |
| (C++20) |
別のviewの要素から、最初のN個の要素をスキップして構成される view(クラステンプレート) (rangeアダプタオブジェクト) |