std::function::function(3)
π NAME π
bestie, this is std::function::function(3) β the constructor page for std::function, straight out of the C++ Standard Libary. It's giving "build me a function object from a bunch of different sources," and honestly? iconic.
π Synopsis
Here's the whole overload lineup, no cap:
function() noexcept;
function( std::nullptr_t ) noexcept;
function( const function& other );
function( function&& other );
function( function&& other ) noexcept;
template< class F >
function( F&& f );
template< class Alloc >
function( std::allocator_arg_t, const Alloc& alloc ) noexcept;
template< class Alloc >
function( std::allocator_arg_t, const Alloc& alloc, std::nullptr_t ) noexcept;
template< class Alloc >
function( std::allocator_arg_t, const Alloc& alloc, const function& other );
template< class Alloc >
function( std::allocator_arg_t, const Alloc& alloc, function&& other );
template< class F, class Alloc >
function( std::allocator_arg_t, const Alloc& alloc, F f );
- (1)
function() noexcept;β since C++11 - (2)
function( std::nullptr_t ) noexcept;β since C++11 - (3)
function( const function& other );β since C++11 - (4)
function( function&& other );β since C++11, until C++20; andfunction( function&& other ) noexcept;β since C++20 - (5)
template< class F > function( F&& f );β since C++11 - (6)
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc ) noexcept;β since C++11, removed in C++17 - (7)
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, std::nullptr_t ) noexcept;β since C++11, removed in C++17 - (8)
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, const function& other );β since C++11, removed in C++17 - (9)
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, function&& other );β since C++11, removed in C++17 - (10)
template< class F, class Alloc > function( std::allocator_arg_t, const Alloc& alloc, F f );β since C++11, removed in C++17
π DESCRIPTION
Constructs a std::function from a variety of sources. Periodt.
- Overloads (1), (2): Creates an empty
std::function. Empty empty. No target, no drama. - Overload (3): Copies the target of
otherto the target of*this. Ifotheris empty,*thiswill be empty right after the call too. - Overload (4): Moves the target of
otherto the target of*this. Ifotheris empty,*thiswill be empty right after the call too. And heads up:otheris in a valid but unspecified state right after the call. - Overload (5): Initializes the target with
std::forward<F>(f). The target is of typestd::decay<F>::type. Iffis a null pointer to function, a null pointer to member, or an empty value of somestd::functionspecialization,*thiswill be empty right after the call. This overload participates in overload resolution only if all following conditions are satisfied:std::is_same_v<std::remove_cvref_t<F>, std::function<R(Args...)>(since C++23) is false.- An lvalue of type
std::decay<F>::typeis callable for argument typesArgs...and return typeR.
- If
std::is_copy_constructible_v<std::decay_t<F>>orstd::is_constructible_v<std::decay_t<F>, F>is false, the program is (since C++23) ill-formed. - If
Fis notCopyConstructible, the behavior is undefined. - Overloads (6)β(10): Same as (1)β(5) except that
allocis used to allocate memory for any internal data structures that thestd::functionmight 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*thisfβ a callable object used to initialize*thisallocβ anAllocatorused for internal memory allocation
π§ Type requirements
Allocmust meet the requirements ofAllocator.
π Exceptions
- 3, 8, 9) Does not throw if
other's target is a function pointer or astd::reference_wrapper, otherwise may throwstd::bad_allocor 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 astd::reference_wrapper, otherwise may throwstd::bad_allocor any exception thrown by the constructor used to copy or move the stored callable object. (until C++20) - 5, 10) Does not throw if
fis a function pointer or astd::reference_wrapper, otherwise may throwstd::bad_allocor any exception thrown by the copy constructor of the stored callable object.
π Notes
ngl, 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. It's giving messy, and not in the cute way.
πΈ Example
This section is incomplete.
Reason: no example.
π₯ Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
LWG 2132β Applied to:C++11β Behavior as published: overloads(5,10)might be ambiguous β Correct behavior: constrainedLWG 2774β Applied to:C++11β Behavior as published:(5,10)performed an additional move β Correct behavior: eliminated
π See also
constructorβ constructs a newstd::move_only_functionobject (C++23) (public member function ofstd::move_only_function)
π Category
Todo no example
Source/version/date vibes: http://cppreference.com, 2024.06.10, and this was std::function::function(3) β bye bestie, go construct something cute πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms