22
General utilities library
[utilities]
22.10
Function objects
[function.objects]
22.10.6
Class template
reference_
wrapper
[refwrap]
22.10.6.1
General
[refwrap.general]
🔗
namespace
std
{
template
<
class
T
>
class
reference_wrapper
{
public
:
// types
using
type
=
T;
//
[refwrap.
const]
, constructors
template
<
class
U
>
constexpr
reference_wrapper
(
U
&
&
)
noexcept
(
see below
)
;
constexpr
reference_wrapper
(
const
reference_wrapper
&
x
)
noexcept
;
//
[refwrap.
assign]
, assignment
constexpr
reference_wrapper
&
operator
=
(
const
reference_wrapper
&
x
)
noexcept
;
//
[refwrap.
access]
, access
constexpr
operator
T
&
(
)
const
noexcept
;
constexpr
T
&
get
(
)
const
noexcept
;
//
[refwrap.
invoke]
, invocation
template
<
class
.
.
.
ArgTypes
>
constexpr
invoke_result_t
<
T
&
, ArgTypes
.
.
.
>
operator
(
)
(
ArgTypes
&
&
.
.
.
)
const
noexcept
(
is_nothrow_invocable_v
<
T
&
, ArgTypes
.
.
.
>
)
;
//
[refwrap.
comparisons]
, comparisons
friend
constexpr
bool
operator
=
=
(
reference_wrapper, reference_wrapper
)
;
friend
constexpr
bool
operator
=
=
(
reference_wrapper,
const
T
&
)
;
friend
constexpr
bool
operator
=
=
(
reference_wrapper, reference_wrapper
<
const
T
>
)
;
friend
constexpr
auto
operator
<
=
>
(
reference_wrapper, reference_wrapper
)
;
friend
constexpr
auto
operator
<
=
>
(
reference_wrapper,
const
T
&
)
;
friend
constexpr
auto
operator
<
=
>
(
reference_wrapper, reference_wrapper
<
const
T
>
)
;
}
;
template
<
class
T
>
reference_wrapper
(
T
&
)
-
>
reference_wrapper
<
T
>
;
}
1
#
reference_
wrapper
<
T
>
is a
Cpp17CopyConstructible
and
Cpp17CopyAssignable
wrapper around a reference to an object or function of type
T
.
2
#
reference_
wrapper
<
T
>
is a trivially copyable type (
[basic.
types.
general]
)
.
3
#
The template parameter
T
of
reference_
wrapper
may be an incomplete type
.
[
Note
1
:
Using the comparison operators described in
[refwrap.
comparisons]
with
T
being an incomplete type can lead to an ill-formed program with no diagnostic required (
[temp.
point]
,
[temp.
constr.
atomic]
)
.
—
end note
]