Spec-Zone.ru › C++

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)
async
(C++11)
запускает функцию асинхронно (возможно, в новой потоке) и возвращает std::future, который будет содержать результат
(шаблон функции)
ranges::begin
(C++20)
возвращает итератор в начало диапазона
(объект точки кастомизации)
ranges::end
(C++20)
возвращает конечный маркер, указывающий на конец диапазона
(объект точки кастомизации)
ranges::rbegin
(C++20)
возвращает обратный итератор в диапазон
(объект точки кастомизации)
ranges::rend
(C++20)
возвращает обратный итератор конца диапазона
(объект точки кастомизации)
ranges::size
(C++20)
возвращает целое число, равное размеру диапазона
(объект точки кастомизации)
ranges::data
(C++20)
получает указатель на начало непрерывного диапазона
(объект точки кастомизации)
views::all_tviews::all
(C++20)
диапазон всех элементов диапазона
(шаблон псевдонима) (объект адаптера диапазона)
ranges::take_viewviews::take
(C++20)
диапазон первых N элементов другого диапазона
(шаблон класса) (объект адаптера диапазона)
ranges::drop_viewviews::drop
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API