decay-copy
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>>
|
(since C++20)
(exposition only*) |
|
Returns std::forward <T> (value) (implicitly converted to the decayed type), a decayed prvalue copy of value
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
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)
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 |
See also
constructs new thread object (public member function of std::thread ) |
|
constructs new jthread object (public member function of std::jthread ) |
|
(C++11)
|
runs a function asynchronously (potentially in a new thread) and returns a std::future that will hold the result (function template) |
(C++20)
|
returns an iterator to the beginning of a range (customization point object) |
(C++20)
|
returns a sentinel indicating the end of a range (customization point object) |
(C++20)
|
returns a reverse iterator to a range (customization point object) |
(C++20)
|
returns a reverse end iterator to a range (customization point object) |
(C++20)
|
returns an integer equal to the size of a range (customization point object) |
(C++20)
|
obtains a pointer to the beginning of a contiguous range (customization point object) |
(C++20)
|
a view that includes all elements of a range
(alias template) (range adaptor object) |
(C++20)
|
a view consisting of the first N elements of another view
(class template) (range adaptor object) |
(C++20)
|
a view consisting of elements of another view , skipping the first N elements(class template) (range adaptor object) |