Scroll to navigation

std::function::function(3) C++ Standard Libary std::function::function(3)

NAME

std::function::function - std::function::function

Synopsis


function() noexcept; (1) (since C++11)
function( std::nullptr_t ) noexcept; (2) (since C++11)
function( const function& other ); (3) (since C++11)
function( function&& other ); (since C++11)
(until C++20)
function( function&& other ) noexcept; (since C++20)
template< class F > (5) (since C++11)
function( F&& f );
template< class Alloc > (since C++11)
function( std::allocator_arg_t, const Alloc& (6) (removed in C++17)
alloc ) noexcept;
template< class Alloc >


function( std::allocator_arg_t, const Alloc& (7) (since C++11)
alloc, (removed in C++17)


std::nullptr_t ) noexcept;
template< class Alloc > (4)


function( std::allocator_arg_t, const Alloc& (8) (since C++11)
alloc, (removed in C++17)


const function& other );
template< class Alloc >


function( std::allocator_arg_t, const Alloc& (9) (since C++11)
alloc, (removed in C++17)


function&& other );
template< class F, class Alloc > (since C++11)
function( std::allocator_arg_t, const Alloc& (10) (removed in C++17)
alloc, F f );


Constructs a std::function from a variety of sources.


1-2) Creates an empty function.
3-4) Copies (3) or moves (4) the target of other to the target of *this. If other is
empty, *this will be empty after the call too. For (4), other is in a valid but
unspecified state after the call.
5) Initializes the target with std::forward<F>(f). The target is of type
std::decay<F>::type. If f is a null pointer to function, a null pointer to member,
or an empty value of some std::function specialization, *this will be empty after
the call. This constructor does not participate in overload resolution unless the
target type is not same as function, and its lvalue is Callable for argument types
Args... and return type R. The program is ill-formed if the target type is not
copy-constructible or initialization of the target is ill-formed.
6-10) Same as (1-5) except that alloc is used to allocate memory for any internal
data structures that the function might use.


When the target is a function pointer or a std::reference_wrapper, small object
optimization is guaranteed, that is, these targets are always directly stored inside
the std::function object, no dynamic allocation takes place. Other large objects may
be constructed in dynamic allocated storage and accessed by the std::function object
through a pointer.

Parameters


other - the function object used to initialize *this
f - a callable object used to initialize *this
alloc - an Allocator used for internal memory allocation

Type requirements


-
std::decay<F>::type must meet the requirements of Callable and CopyConstructible.
-
Alloc must meet the requirements of Allocator.

Exceptions


3,8,9) Does not throw if other's target is a function pointer or a
std::reference_wrapper, otherwise may throw std::bad_alloc or any exception thrown
by the constructor used to copy or move the stored callable object.


4) Does not throw if other's target is a function pointer or a
std::reference_wrapper, otherwise may throw std::bad_alloc or any (until C++20)
exception thrown by the constructor used to copy or move the stored
callable object.


5,10) Does not throw if f is a function pointer or a std::reference_wrapper,
otherwise may throw std::bad_alloc or any exception thrown by the copy constructor
of the stored callable object.

Notes


std::function's allocator support was poorly specified and inconsistently
implemented. Some implementations do not provide overloads (6-10) at all, some
provide the overloads but ignore the supplied allocator argument, and some provide
the overloads and use the supplied allocator for construction but not when the
std::function is reassigned. As a result, allocator support was removed in C++17.

Example


This section is incomplete
Reason: no example


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
LWG 2132 C++11 constructor taking a Callable object might be constrained
ambiguous
LWG 2774 C++11 constructor taking a Callable performed an eliminated
additional move

See also


constructor constructs a new std::move_only_function object
(C++23) (public member function of std::move_only_function)

2022.07.31 http://cppreference.com