Namespaces
Variants

decay-copy

From cppreference.net
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 を返す
(関数テンプレート)
範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)
範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト)
範囲の逆方向イテレータを返す
(カスタマイゼーションポイントオブジェクト)
範囲の逆方向終端イテレータを返す
(カスタマイゼーションポイントオブジェクト)
範囲のサイズに等しい整数を返す
(カスタマイゼーションポイントオブジェクト)
連続範囲の先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)
range の全要素を含む view
(エイリアステンプレート) (範囲アダプタオブジェクト)
別の view の最初のN個の要素からなる view
(クラステンプレート) (範囲アダプタオブジェクト)
別の view の最初のN個の要素をスキップした要素からなる view
(クラステンプレート) (範囲アダプタオブジェクト)