Namespaces
Variants

decay-copy

From cppreference.net
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 ) (неявно преобразованное в decayed-тип), decayed prvalue копию value .

Содержание

Параметры

value - значение для копирования

Возвращаемое значение

Распавшаяся копия value как prvalue.

Примечания

decay-copy был введен в результате решения LWG issue 929 . Изначально он использовался в библиотеке поддержки параллелизма для обеспечения decay аргументов при передаче по значению, а позже стал использоваться в библиотеке диапазонов .

Языковая возможность auto ( x ) представленная в C++23 также позволяет создавать decayed-копии как prvalue. Единственное различие заключается в том, что decay-copy всегда материализует value и создает копию, тогда как auto ( expr ) является no-op операцией, если expr является prvalue.

Все использования decay-copy в стандартной библиотеке (см. ниже), за исключением views::all , ranges::take_view и ranges::drop_view , заменены на auto ( x ) начиная с C++23.

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3724 C++20 decay-copy was not constrained constrained

Смотрите также

создает новый объект thread
(публичная функция-член std::thread )
создает новый объект jthread
(публичная функция-член std::jthread )
(C++11)
запускает функцию асинхронно (потенциально в новом потоке) и возвращает std::future , который будет содержать результат
(шаблон функции)
возвращает итератор на начало диапазона
(объект точки настройки)
возвращает страж, указывающий на конец диапазона
(объект точки настройки)
возвращает обратный итератор на диапазон
(объект точки настройки)
возвращает обратный конечный итератор на диапазон
(объект точки настройки)
возвращает целое число, равное размеру диапазона
(объект точки настройки)
получает указатель на начало непрерывного диапазона
(объект точки настройки)
view , который включает все элементы range
(псевдоним шаблона) (объект адаптера диапазона)
view , состоящий из первых N элементов другого view
(шаблон класса) (объект адаптера диапазона)
view , состоящий из элементов другого view , пропуская первые N элементов
(шаблон класса) (объект адаптера диапазона)