Namespaces
Variants

std::copyable_function::copyable_function

из ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы для проверки возможностей библиотеки (C++20)
Утилиты программы
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
Функциональные объекты
Вызов функции
(C++17)(C++23)
Тождественный функциональный объект
(C++20)
Старые связыватели и адапторы
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
 
copyable_function() noexcept;
(1) (начиная с C++26)
copyable_function( std::nullptr_t ) noexcept;
(2) (начиная с C++26)
copyable_function( const copyable_function& other );
(3) (начиная с C++26)
copyable_function( copyable_function&& other ) noexcept;
(4) (начиная с C++26)
template< class F > 
copyable_function( F&& f );
(5) (начиная с C++26)
template< class T, class... CArgs > 
explicit copyable_function( std::in_place_type_t<T>, CArgs&&... args );
(6) (начиная с C++26)
template< class T, class U, class... CArgs > 
explicit copyable_function( std::in_place_type_t<T>,
                            std::initializer_list<U> il, CArgs&&... args );
(7) (начиная с C++26)

Создаёт новый std::copyable_function.

1,2) Конструктор по умолчанию и конструктор, принимающий nullptr, создают пустой std::copyable_function.
3) Конструктор копирования создаёт std::copyable_function, чей целевой объект является копией целевого объекта other. В противном случае создаёт пустой std::copyable_function, если other пуст.
4) Конструктор перемещения создаёт std::copyable_function, чей целевой объект является целевым объектом other. После перемещения other находится в корректном, но неопределённом состоянии.
5) Пусть VT будет std::decay_t<F>. Если f является нулевым указателем на функцию, нулевым указателем на элемент или пустым std::copyable_function (может быть любой другой специализацией), то создаётся пустой std::copyable_function. В противном случае создаётся std::copyable_function, чей целевой объект имеет тип VT и прямой-не-списочной-инициализацией инициализирован с помощью std::forward<F>(f).
  • Эта перегрузка участвует в разрешении перегрузки только если VT не является ни тем же самым, что и copyable_function, ни специализацией std::in_place_type_t, и /*is-callable-from*/<VT> (см. ниже) является true.
  • Программа считается некорректной, если std::is_constructible_v<VT, F> или std::is_copy_constructible_v<VT> не является true.
6) Пусть VT будет std::decay_t<T>. Создаёт std::copyable_function, чей целевой объект имеет тип VT и прямой-не-списочной-инициализацией инициализирован с помощью std::forward<CArgs>(args)....
  • Эта перегрузка участвует в разрешении перегрузки только если и std::is_constructible_v<VT, CArgs...>, и /*is-callable-from*/<VT> (см. ниже) являются true.
  • Программа считается некорректной, если VT не является тем же типом, что и T, или std::is_copy_constructible_v<VT> не является true.
7) Пусть VT будет std::decay_t<T>. Создаёт std::copyable_function, чей целевой объект имеет тип VT и прямой-не-списочной-инициализацией инициализирован с помощью il, std::forward<CArgs>(args)....
  • Эта перегрузка участвует в разрешении перегрузки только если и std::is_constructible_v<VT, std::initializer_list<U>&, CArgs...>, и /*is-callable-from*/<VT> (см. ниже) являются true.
  • Программа считается некорректной, если VT не является тем же типом, что и T, или std::is_copy_constructible_v<VT> не является true.

Для конструкторов (5-7), поведение не определено, если VT не удовлетворяет обоим требованиям Destructible и CopyConstructible.

Константа /*is-callable-from*/<VT> зависит от cv, ref и noex в параметре шаблона std::copyable_function следующим образом:

cv ref noexcept(noex) /*is-callable-from*/<VT>
noexcept(false) std::is_invocable_r_v<R, VT, Args...> && std::is_invocable_r_v<R, VT&, Args...>
noexcept(true) std::is_nothrow_invocable_r_v<R, VT, Args...> && std::is_nothrow_invocable_r_v<R, VT&, Args...>
const noexcept(false) std::is_invocable_r_v<R, const VT, Args...> && std::is_invocable_r_v<R, const VT&, Args...>
const noexcept(true) std::is_nothrow_invocable_r_v<R, const VT, Args...> && std::is_nothrow_invocable_r_v<R, const VT&, Args...>
& noexcept(false) std::is_invocable_r_v<R, VT&, Args...>
& noexcept(true) std::is_nothrow_invocable_r_v<R, VT&, Args...>
const & noexcept(false) std::is_invocable_r_v<R, const VT&, Args...>
const & noexcept(true) std::is_nothrow_invocable_r_v<R, const VT&, Args...>
&& noexcept(false) std::is_invocable_r_v<R, VT, Args...>
&& noexcept(true) std::is_nothrow_invocable_r_v<R, VT, Args...>
const && noexcept(false) std::is_invocable_r_v<R, const VT, Args...>
const && noexcept(true) std::is_nothrow_invocable_r_v<R, const VT, Args...>

Параметры

other - другой std::copyable_function для копирования или перемещения
f - функция или Callable объект для обёртывания
args - аргументы для конструирования целевого объекта
il - std::initializer_list для конструирования целевого объекта

Исключения

3) Может выбросить std::bad_alloc при ошибке выделения памяти или распространить исключение, выброшенное при инициализации целевого объекта.
5-7) Может выбросить std::bad_alloc при ошибке выделения памяти или распространить исключение, выброшенное при инициализации цели. Никаких исключений не выбрасывается, если VT является типом указателя на функцию или специализацией std::reference_wrapper .

Пример

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

создает новый экземпляр std::function
(публичная функция-член std::function<R(Args...)> )
создает новый объект std::move_only_function
(публичная функция-член std::move_only_function )