decay-copy
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>>
constexpr std::decay_t<T> /*decay-copy*/( T&& value )
noexcept(std::is_nothrow_convertible_v<T, std::decay_t<T>>);
|
(C++20 から) (説明専用*) |
|
std::forward<T>(value)(減衰型に暗黙変換されたもの)を返します。これは value の減衰型prvalueコピーです。
パラメータ
| value | - | コピーされる値 |
戻り値
value の減衰コピーをprvalueとして。
注記
decay-copy
は
LWG issue 929
の解決によって導入されました。当初は
並行性サポートライブラリ
で値渡しの際に引数が decay されることを保証するために使用され、後に
ranges ライブラリ
でも使用されるようになりました。
C++23で導入された言語機能
auto
(
x
)
も、減衰コピーをprvalueとして作成することを可能にします。唯一の違いは、
decay-copy
が常に
実体化
value
を行いコピーを生成するのに対し、
auto
(
expr
)
は
expr
がprvalueの場合には何も行わない点です。
標準ライブラリにおける
decay-copy
の使用(下記参照)は、
views::all
、
ranges::take_view
および
ranges::drop_view
を除き、C++23以降
auto
(
x
)
で置き換えられています。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3724 | C++20 |
decay-copy
は制約されていなかった
|
制約されている |
関連項目
新しい
thread
オブジェクトを構築する
(
std::thread
の公開メンバ関数)
|
|
新しい
jthread
オブジェクトを構築する
(
std::jthread
の公開メンバ関数)
|
|
|
(C++11)
|
関数を非同期で(新しいスレッドで可能性あり)実行し、結果を保持する
std::future
を返す
(関数テンプレート) |
|
(C++20)
|
範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
範囲の逆方向イテレータを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
範囲の逆方向終端イテレータを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
範囲のサイズに等しい整数を返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
連続範囲の先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
range
の全要素を含む
view
(エイリアステンプレート) (範囲アダプタオブジェクト) |
|
(C++20)
|
別の
view
の最初のN個の要素からなる
view
(クラステンプレート) (範囲アダプタオブジェクト) |
|
(C++20)
|
別の
view
の最初のN個の要素をスキップした要素からなる
view
(クラステンプレート) (範囲アダプタオブジェクト) |