20
General utilities library
[utilities]
20.14
Function objects
[function.objects]
20.14.17
Polymorphic function wrappers
[func.wrap]
20.14.17.3
Class template
function
[func.wrap.func]
20.14.17.3.1
General
[func.wrap.func.general]
namespace
std
{
template
<
class
>
class
function;
//
not defined
template
<
class
R,
class
.
.
.
ArgTypes
>
class
function
<
R
(
ArgTypes
.
.
.
)
>
{
public
:
using
result_type
=
R;
//
[func.
wrap.
func.
con]
, construct/copy/destroy
function
(
)
noexcept
; function
(
nullptr_t
)
noexcept
; function
(
const
function
&
)
; function
(
function
&
&
)
noexcept
;
template
<
class
F
>
function
(
F
)
; function
&
operator
=
(
const
function
&
)
; function
&
operator
=
(
function
&
&
)
; function
&
operator
=
(
nullptr_t
)
noexcept
;
template
<
class
F
>
function
&
operator
=
(
F
&
&
)
;
template
<
class
F
>
function
&
operator
=
(
reference_wrapper
<
F
>
)
noexcept
;
~
function
(
)
;
//
[func.
wrap.
func.
mod]
, function modifiers
void
swap
(
function
&
)
noexcept
;
//
[func.
wrap.
func.
cap]
, function capacity
explicit
operator
bool
(
)
const
noexcept
;
//
[func.
wrap.
func.
inv]
, function invocation
R
operator
(
)
(
ArgTypes
.
.
.
)
const
;
//
[func.
wrap.
func.
targ]
, function target access
const
type_info
&
target_type
(
)
const
noexcept
;
template
<
class
T
>
T
*
target
(
)
noexcept
;
template
<
class
T
>
const
T
*
target
(
)
const
noexcept
;
}
;
template
<
class
R,
class
.
.
.
ArgTypes
>
function
(
R
(
*
)
(
ArgTypes
.
.
.
)
)
-
>
function
<
R
(
ArgTypes
.
.
.
)
>
;
template
<
class
F
>
function
(
F
)
-
>
function
<
see below
>
;
//
[func.
wrap.
func.
nullptr]
, null pointer comparison operator functions
template
<
class
R,
class
.
.
.
ArgTypes
>
bool
operator
=
=
(
const
function
<
R
(
ArgTypes
.
.
.
)
>
&
, nullptr_t
)
noexcept
;
//
[func.
wrap.
func.
alg]
, specialized algorithms
template
<
class
R,
class
.
.
.
ArgTypes
>
void
swap
(
function
<
R
(
ArgTypes
.
.
.
)
>
&
, function
<
R
(
ArgTypes
.
.
.
)
>
&
)
noexcept
;
}
1
#
The
function
class template provides polymorphic wrappers that generalize the notion of a function pointer
.
Wrappers can store, copy, and call arbitrary
callable objects
, given a
call signature
, allowing functions to be first-class objects
.
2
#
A
callable type
F
is
Lvalue-Callable
for argument types
ArgTypes
and return type
R
if the expression
INVOKE
<
R
>
(
declval
<
F
&
>
(
)
, declval
<
ArgTypes
>
(
)
.
.
.
)
, considered as an
unevaluated operand
, is well-formed (
[func.
require]
)
.
3
#
The
function
class template is a
call wrapper
whose
call signature
is
R
(
ArgTypes
.
.
.
)
.
4
#
[
Note
1
:
The types deduced by the deduction guides for
function
might change in future revisions of C++
.
—
end note
]