decay-copy - cppreference.com (original) (raw)
Returns std::forward<T>(value) (implicitly converted to the decayed type), a decayed prvalue copy of value.
[edit] Parameters
| value | - | the value to be copied |
|---|
[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
| (constructor) | constructs new thread object (public member function of std::thread) [edit] |
|---|---|
| (constructor) | constructs new jthread object (public member function of std::jthread) [edit] |
| async(C++11) | runs a function asynchronously (potentially in a new thread) and returns a std::future that will hold the result (function template) [edit] |
| ranges::begin(C++20) | returns an iterator to the beginning of a range(customization point object)[edit] |
| ranges::end(C++20) | returns a sentinel indicating the end of a range(customization point object)[edit] |
| ranges::rbegin(C++20) | returns a reverse iterator to a range(customization point object)[edit] |
| ranges::rend(C++20) | returns a reverse end iterator to a range(customization point object)[edit] |
| ranges::size(C++20) | returns an integer equal to the size of a range(customization point object)[edit] |
| ranges::data(C++20) | obtains a pointer to the beginning of a contiguous range(customization point object)[edit] |
| views::all_tviews::all(C++20) | a view that includes all elements of a range(alias template) (range adaptor object)[edit] |
| ranges::take_viewviews::take(C++20) | a view consisting of the first N elements of another view(class template) (range adaptor object)[edit] |
| ranges::drop_viewviews::drop(C++20) | a view consisting of elements of another view, skipping the first N elements(class template) (range adaptor object)[edit] |