std::function<R(Args...)>::function
来自cppreference.com
                    
                                        
                    < cpp | utility | functional | function
                    
                                                            
                    |   function() noexcept;  | 
(1) | (C++11 起) | 
|   function( std::nullptr_t ) noexcept;  | 
(2) | (C++11 起) | 
|   function( const function& other );  | 
(3) | (C++11 起) | 
| (4) | ||
|   function( function&& other );  | 
 (C++11 起)  (C++20 前)  | 
|
|   function( function&& other ) noexcept;  | 
(C++20 起) | |
|   template< class F >  function( F&& f );  | 
(5) | (C++11 起) | 
|   template< class Alloc >  function( std::allocator_arg_t, const Alloc& alloc ) noexcept;  | 
(6) |  (C++11 起)  (C++17 中移除)  | 
|   template< class Alloc >  function( std::allocator_arg_t, const Alloc& alloc,   | 
(7) |  (C++11 起)  (C++17 中移除)  | 
|   template< class Alloc >  function( std::allocator_arg_t, const Alloc& alloc,   | 
(8) |  (C++11 起)  (C++17 中移除)  | 
|   template< class Alloc >  function( std::allocator_arg_t, const Alloc& alloc,   | 
(9) |  (C++11 起)  (C++17 中移除)  | 
|   template< class F, class Alloc >  function( std::allocator_arg_t, const Alloc& alloc, F f );  | 
(10) |  (C++11 起)  (C++17 中移除)  | 
从各种资源构造 std::function 。
1-2) 构造空 
function 。3-4) 复制 (3) 或移动 (4) 
other 的目标到 *this 的目标。若 other 为空,则调用后 *this 将亦为空。对于 (4) , other 在调用后处于合法但未指定的状态。5) 以 std::forward<F>(f) 初始化目标。目标的类型为 std::decay<F>::type 。若 
f 是空指针、指向成员的空指针或某 std::function 特化的空值,则 *this 在此调用后将为空。此构造函数不参与重载决议,除非目标类型与 function 不相同,且其左值对参数类型 Args... 和返回类型 R 可调用 (Callable) 。若目标类型不可复制构造或目标的初始化非良构,则程序非良构。6-10) 同 (1-5) ,除了将 
alloc 用于分配任何 function 会用到的内部数据结构的内存。目标是函数指针或 std::reference_wrapper 时,保证使用小对象优化,即始终直接存储这些目标于 std::function 对象中,不发生动态内存分配。可以构造其他大对象于动态分配的存储中,并由 std::function 对象通过指针访问。
参数
| other | - | 用于初始化 *this 的函数对象 | 
| f | - | 用于初始化 *this 的可调用对象 | 
| alloc | - | 用于内部内存分配的分配器 (Allocator) | 
| 类型要求 | ||
 -std::decay<F>::type 必须符合可调用 (Callable)  和 可复制构造 (CopyConstructible)  的要求。
 | ||
 -Alloc 必须符合分配器 (Allocator)  的要求。
 | ||
异常
3,8,9) 若 
 other 的目标是函数指针或 std::reference_wrapper 则不抛出异常,否则可能抛出 std::bad_alloc 或用于复制或移动存储的可调用对象的构造函数所抛的异常。| 
 4) 若  
other 的目标是函数指针或 std::reference_wrapper 则不抛出异常,否则可能抛出 std::bad_alloc 或用于复制或移动存储的可调用对象的构造函数所抛的异常。 | 
(C++20 前) | 
注解
std::function 的分配器支持说明贫乏,且实现不一致。一些实现完全不提供重载 (6-10) ,一些提供重载但忽略提供的分配器参数,而一些实现提供重载并将提供的分配器用于构造,但不在重赋值 std::function 时使用。结果, C++17 中移除了分配器支持。
示例
| 本节未完成 原因:暂无示例  | 
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 2132 | C++11 | 接收一个可调用 (Callable) 对象的构造函数可能有歧义 | 已约束 | 
| LWG 2774 | C++11 | 接收一个可调用 (Callable) 对象的函数进行一次额外移动 | 已消除 | 
参阅
|    (C++23)  | 
  构造新的 std::move_only_function 对象 ( std::move_only_function 的公开成员函数)  |