decay-copy
Returns std::forward
# Declarations
template< class T >
typename std::decay<T>::type decay-copy( T&& value );
(since C++11) (until C++20) (exposition only*)
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>>);
(since C++20) (exposition only*)
# Parameters
value: the value to be copied
# Return value
A decayed copy of value as a prvalue.
# Notes
decay-copy was introduced by the resolution of LWG issue 929. It is initially used in the concurrency support library to ensure that arguments are decayed when passing-by-value, and is later used in the ranges library.
The language feature auto(x) introduced in C++23 also allows decayed copies to be created as prvalues. The only difference is that decay-copy always materializes value and produces a copy, while auto(expr) is a no-op if expr is a prvalue.
All usages of decay-copy in the standard library (see below) except views::all, ranges::take_view and ranges::drop_view are replaced with auto(x) since C++23.
# Defect reports
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3724 | C++20 | decay-copy was not constrained | constrained |