decay-copy
template< class T > typename std::decay<T>::type decay-copy( T&& value ); |
(с C++11) (до C++20) (только для примера*) | |
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>>);
| (с C++20) (только для примера*) |
Возвращает std::forward<T>(value) (явное преобразование к типу результата), скопированное значение value.
Параметры
| value | - | значение для копирования |
Возвращаемое значение
Скопированное значение value в виде временного объекта.
Примечания
decay-copy было введено в результате решения LWG issue 929. Оно изначально используется в библиотеке поддержки конкурентности для обеспечения распада аргументов при передаче по значению, и впоследствии используется в библиотеке диапазонов.
Функциональная возможность auto(x), представленная в C++23, также позволяет создавать скопированные значения результата в виде временных объектов. Единственное отличие состоит в том, что decay-copy всегда создаёт value и производит копирование, в то время как auto(expr) является недействующей операцией, если expr является временным объектом.
Все использования decay-copy в стандартной библиотеке (см. ниже), за исключением views::all, ranges::take_view и ranges::drop_view, заменяются на auto(x) с C++23.
Отчёты о дефектах
Следующие отчёты о дефектах, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применимо к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 3724 | C++20 |
decay-copy не было ограничено | ограничено |
См. также
создаёт новый объект thread (публичный член-функция std::thread) |
|
создаёт новый объект jthread (публичный член-функция std::jthread) |
|
|
(C++11) | запускает функцию асинхронно (возможно, в новой потоке) и возвращает std::future, который будет содержать результат (шаблон функции) |
|
(C++20) | возвращает итератор в начало диапазона (объект точки кастомизации) |
|
(C++20) | возвращает конечный маркер, указывающий на конец диапазона (объект точки кастомизации) |
|
(C++20) | возвращает обратный итератор в диапазон (объект точки кастомизации) |
|
(C++20) | возвращает обратный итератор конца диапазона (объект точки кастомизации) |
|
(C++20) | возвращает целое число, равное размеру диапазона (объект точки кастомизации) |
|
(C++20) | получает указатель на начало непрерывного диапазона (объект точки кастомизации) |
|
(C++20) | диапазон всех элементов диапазона (шаблон псевдонима) (объект адаптера диапазона) |
|
(C++20) | диапазон первых N элементов другого диапазона (шаблон класса) (объект адаптера диапазона) |
|
(C++20) | диапазон элементов другого диапазона, пропуская первые N элементов (шаблон класса) (объект адаптера диапазона) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/standard_library/decay-copy