名前空間
変種
操作

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>>
constexpr std::decay_t<T> decay-copy( T&& value )

    noexcept(std::is_nothrow_convertible_v<T, std::decay_t<T>>);
(C++20以降)
(説明用*)

valueのprvalueコピーである、型が変換された(decayされた)std::forward<T>(value)を返します。

目次

[編集] パラメーター

value - コピーされる値

[編集] 戻り値

valueの、decayされたprvalueコピー。

[編集] 備考

decay-copyLWG issue 929の解決により導入されました。当初は並行処理サポートライブラリにおいて、引数を値渡しする際にdecayされることを保証するために使用され、後にレンジライブラリで使用されました。

C++23で導入された言語機能auto(x)も、prvalueとしてdecayされたコピーを作成することを可能にします。唯一の違いは、decay-copyは常にvalue実体化し、コピーを生成するのに対し、auto(expr)exprがprvalueであればno-opである点です。

views::allranges::take_viewranges::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 を返す
(関数テンプレート) [編集]
rangeの先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)[編集]
rangeの終端を示す番兵を返す
(カスタマイゼーションポイントオブジェクト)[編集]
rangeへの逆イテレータを返す
(カスタマイゼーションポイントオブジェクト)[編集]
rangeへの逆終端イテレータを返す
(カスタマイゼーションポイントオブジェクト)[編集]
rangeのサイズと等しい整数を返す
(カスタマイゼーションポイントオブジェクト)[編集]
連続rangeの先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)[編集]
rangeのすべての要素を含む view
(エイリアステンプレート) (rangeアダプタオブジェクト)[編集]
別のviewの最初のN個の要素からなる view
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
別のviewの要素から、最初のN個の要素をスキップして構成される view
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)