decay-copy
typename std::decay <T>::type decay-copy( T&& value );
(until C++20)
(exposition only*)
requires std::convertible_to <T, std::decay_t <T>>
constexpr std::decay_t <T> decay-copy( T&& value )
(exposition only*)
Returns std::forward <T>(value) (implicitly converted to the decayed type), a decayed prvalue copy of value.
[edit] Parameters
[edit] Return value
A decayed copy of value as a prvalue.
[edit] 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.
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3724 | C++20 | decay-copy was not constrained
|
constrained |
[edit] See also
(function template) [edit]
view
consisting of the first N elements of another view
(class template) (range adaptor object)[edit]