最終更新日時:
が更新

履歴 編集

function
<exposition-only>

decay-copy(C++20)

template<class T>
constexpr decay_t<T> decay-copy(T&& v)
  noexcept(is_nothrow_convertible_v<T, decay_t<T>>);            // (1) C++20
template<class T>
  requires convertible_to<T, decay_t<T>>
constexpr decay_t<T> decay-copy(T&& v)
  noexcept(is_nothrow_convertible_v<T, decay_t<T>>);            // (1) C++23

概要

以下の型変換をしながら、値をコピーまたはムーブする。

  • 左辺値から右辺値への変換
  • 配列からポインタへの変換
  • 関数の左辺値から関数ポインタへの変換

この関数は、参照ではなくコピーまたはムーブした値であることを明示するために使われる。

例えば、以下のような関数fがあるとき、式f()の効果を「gと等しい」と説明した場合、型はint&になってしまう。そこで、f()の効果を正確に述べるために「decay-copy(g)と等しい」という表現を用いる。

int g = 0;
int f(){ return g; }

効果

以下と等価である:

return std::forward<T>(v);

戻り値

decay-copy(v)の値は次のようになる。

  1. vが配列型の場合は、先頭要素へのポインタ
  2. vが関数型の場合は、関数へのポインタ
  3. vrvalueの場合は、ムーブしたv
  4. それ以外の場合、コピーしたv

バージョン

言語

  • C++20

参照