function() noexcept;
function(nullptr_t) noexcept;
function(const function& f);
Throws: не должен генерировать исключения, если fцель является специализацией reference_wrapper или указателем на функцию. В противном случае может вызвать bad_alloc или любое исключение, созданное конструктором копирования сохраненного вызываемого объекта. [ Note: Реализациям рекомендуется избегать использования динамически выделяемой памяти для небольших вызываемых объектов, например, где fцелью является объект, содержащий только указатель или ссылку на объект и указатель на функцию-член. ] — end note
function(function&& f);
Postconditions: Если !f, *this не имеют целей; в противном случае цель *this эквивалентна цели f до построения и f находится в допустимом состоянии с неопределенным значением.
Throws: не должен генерировать исключения, если fцель является специализацией reference_wrapper или указателем на функцию. В противном случае может вызвать bad_alloc или любое исключение, созданное конструктором копирования или перемещения сохраненного вызываемого объекта. [ Note: Реализациям рекомендуется избегать использования динамически выделяемой памяти для небольших вызываемых объектов, например, где fцелью является объект, содержащий только указатель или ссылку на объект и указатель на функцию-член. ] — end note
template<class F> function(F f);
Remarks: Этот шаблон конструктора не должен участвовать в разрешении перегрузки, если только он не F предназначен Lvalue-Callable для типов аргументов ArgTypes... и типа возвращаемого значения R.
В противном случае *this нацелена на копию, f инициализированную с помощью std::move(f). [ Note: Реализациям рекомендуется избегать использования динамически выделяемой памяти для небольших вызываемых объектов, например, где f объект, содержащий только указатель или ссылку на объект и указатель на функцию-член. ] — end note
Throws: не должен генерировать исключения, если f это указатель на функцию или reference_wrapper<T> для некоторых T. В противном случае может вызвать bad_alloc или любое исключение, созданное конструктором Fкопирования или перемещения.
template<class F> function(F) -> function<see below>;
Remarks: Это руководство по выводу участвует в разрешении перегрузки только в том случае, если &F::operator() оно правильно сформировано, когда рассматривается как неоцененный операнд. В том случае, если decltype(&F::operator()) is имеет форму R(G::*)(A...) cv &opt noexceptopt для типа класса G, то выводимый тип имеет вид function<R(A...)>.
[ Example:
void f() {
int i{5};
function g = [&](double) { return i; }; // deduces function<int(double)>
}
— end example ]
function& operator=(const function& f);
function& operator=(function&& f);
function& operator=(nullptr_t) noexcept;
template<class F> function& operator=(F&& f);
Remarks: Этот оператор присваивания не должен участвовать в разрешении перегрузки, кроме decay_t<F> как Lvalue-Callable для типов аргументов ArgTypes... и типа возвращаемого значения R.
template<class F> function& operator=(reference_wrapper<F> f) noexcept;
~function();