20
General utilities library
[utilities]
20.2
Utility components
[utility]
20.2.1
Header
<utility>
synopsis
[utility.syn]
1
#
The header
<
utility
>
contains some basic function and class templates that are used throughout the rest of the library
.
#include
<
compare
>
// see
[compare.
syn]
#include
<
initializer_list
>
// see
[initializer.
list.
syn]
namespace
std
{
//
[utility.
swap]
, swap
template
<
class
T
>
constexpr
void
swap
(
T
&
a, T
&
b
)
noexcept
(
see below
)
;
template
<
class
T, size_t N
>
constexpr
void
swap
(
T
(
&
a
)
[
N
]
, T
(
&
b
)
[
N
]
)
noexcept
(
is_nothrow_swappable_v
<
T
>
)
;
//
[utility.
exchange]
, exchange
template
<
class
T,
class
U
=
T
>
constexpr
T exchange
(
T
&
obj, U
&
&
new_val
)
;
//
[forward]
, forward/move
template
<
class
T
>
constexpr
T
&
&
forward
(
remove_reference_t
<
T
>
&
t
)
noexcept
;
template
<
class
T
>
constexpr
T
&
&
forward
(
remove_reference_t
<
T
>
&
&
t
)
noexcept
;
template
<
class
T
>
constexpr
remove_reference_t
<
T
>
&
&
move
(
T
&
&
)
noexcept
;
template
<
class
T
>
constexpr
conditional_t
<
!
is_nothrow_move_constructible_v
<
T
>
&
&
is_copy_constructible_v
<
T
>
,
const
T
&
, T
&
&
>
move_if_noexcept
(
T
&
x
)
noexcept
;
//
[utility.
as.
const]
,
as_const
template
<
class
T
>
constexpr
add_const_t
<
T
>
&
as_const
(
T
&
t
)
noexcept
;
template
<
class
T
>
void
as_const
(
const
T
&
&
)
=
delete
;
//
[declval]
, declval
template
<
class
T
>
add_rvalue_reference_t
<
T
>
declval
(
)
noexcept
;
// as unevaluated operand
//
[utility.
intcmp]
, integer comparison functions
template
<
class
T,
class
U
>
constexpr
bool
cmp_equal
(
T t, U u
)
noexcept
;
template
<
class
T,
class
U
>
constexpr
bool
cmp_not_equal
(
T t, U u
)
noexcept
;
template
<
class
T,
class
U
>
constexpr
bool
cmp_less
(
T t, U u
)
noexcept
;
template
<
class
T,
class
U
>
constexpr
bool
cmp_greater
(
T t, U u
)
noexcept
;
template
<
class
T,
class
U
>
constexpr
bool
cmp_less_equal
(
T t, U u
)
noexcept
;
template
<
class
T,
class
U
>
constexpr
bool
cmp_greater_equal
(
T t, U u
)
noexcept
;
template
<
class
R,
class
T
>
constexpr
bool
in_range
(
T t
)
noexcept
;
//
[intseq]
, compile-time integer sequences
template
<
class
T, T
.
.
.
>
struct
integer_sequence;
template
<
size_t
.
.
.
I
>
using
index_sequence
=
integer_sequence
<
size_t, I
.
.
.
>
;
template
<
class
T, T N
>
using
make_integer_sequence
=
integer_sequence
<
T,
see below
>
;
template
<
size_t N
>
using
make_index_sequence
=
make_integer_sequence
<
size_t, N
>
;
template
<
class
.
.
.
T
>
using
index_sequence_for
=
make_index_sequence
<
sizeof
.
.
.
(
T
)
>
;
//
[pairs]
, class template
pair
template
<
class
T1,
class
T2
>
struct
pair;
//
[pairs.
spec]
, pair specialized algorithms
template
<
class
T1,
class
T2
>
constexpr
bool
operator
=
=
(
const
pair
<
T1, T2
>
&
,
const
pair
<
T1, T2
>
&
)
;
template
<
class
T1,
class
T2
>
constexpr
common_comparison_category_t
<
synth-three-way-result
<
T1
>
,
synth-three-way-result
<
T2
>
>
operator
<
=
>
(
const
pair
<
T1, T2
>
&
,
const
pair
<
T1, T2
>
&
)
;
template
<
class
T1,
class
T2
>
constexpr
void
swap
(
pair
<
T1, T2
>
&
x, pair
<
T1, T2
>
&
y
)
noexcept
(
noexcept
(
x
.
swap
(
y
)
)
)
;
template
<
class
T1,
class
T2
>
constexpr
see below
make_pair
(
T1
&
&
, T2
&
&
)
;
//
[pair.
astuple]
, tuple-like access to pair
template
<
class
T
>
struct
tuple_size;
template
<
size_t I,
class
T
>
struct
tuple_element;
template
<
class
T1,
class
T2
>
struct
tuple_size
<
pair
<
T1, T2
>
>
;
template
<
size_t I,
class
T1,
class
T2
>
struct
tuple_element
<
I, pair
<
T1, T2
>
>
;
template
<
size_t I,
class
T1,
class
T2
>
constexpr
tuple_element_t
<
I, pair
<
T1, T2
>
>
&
get
(
pair
<
T1, T2
>
&
)
noexcept
;
template
<
size_t I,
class
T1,
class
T2
>
constexpr
tuple_element_t
<
I, pair
<
T1, T2
>
>
&
&
get
(
pair
<
T1, T2
>
&
&
)
noexcept
;
template
<
size_t I,
class
T1,
class
T2
>
constexpr
const
tuple_element_t
<
I, pair
<
T1, T2
>
>
&
get
(
const
pair
<
T1, T2
>
&
)
noexcept
;
template
<
size_t I,
class
T1,
class
T2
>
constexpr
const
tuple_element_t
<
I, pair
<
T1, T2
>
>
&
&
get
(
const
pair
<
T1, T2
>
&
&
)
noexcept
;
template
<
class
T1,
class
T2
>
constexpr
T1
&
get
(
pair
<
T1, T2
>
&
p
)
noexcept
;
template
<
class
T1,
class
T2
>
constexpr
const
T1
&
get
(
const
pair
<
T1, T2
>
&
p
)
noexcept
;
template
<
class
T1,
class
T2
>
constexpr
T1
&
&
get
(
pair
<
T1, T2
>
&
&
p
)
noexcept
;
template
<
class
T1,
class
T2
>
constexpr
const
T1
&
&
get
(
const
pair
<
T1, T2
>
&
&
p
)
noexcept
;
template
<
class
T2,
class
T1
>
constexpr
T2
&
get
(
pair
<
T1, T2
>
&
p
)
noexcept
;
template
<
class
T2,
class
T1
>
constexpr
const
T2
&
get
(
const
pair
<
T1, T2
>
&
p
)
noexcept
;
template
<
class
T2,
class
T1
>
constexpr
T2
&
&
get
(
pair
<
T1, T2
>
&
&
p
)
noexcept
;
template
<
class
T2,
class
T1
>
constexpr
const
T2
&
&
get
(
const
pair
<
T1, T2
>
&
&
p
)
noexcept
;
//
[pair.
piecewise]
, pair piecewise construction
struct
piecewise_construct_t
{
explicit
piecewise_construct_t
(
)
=
default
;
}
;
inline
constexpr
piecewise_construct_t piecewise_construct
{
}
;
template
<
class
.
.
.
Types
>
class
tuple;
// defined in
<tuple>
// in-place construction
struct
in_place_t
{
explicit
in_place_t
(
)
=
default
;
}
;
inline
constexpr
in_place_t in_place
{
}
;
template
<
class
T
>
struct
in_place_type_t
{
explicit
in_place_type_t
(
)
=
default
;
}
;
template
<
class
T
>
inline
constexpr
in_place_type_t
<
T
>
in_place_type
{
}
;
template
<
size_t I
>
struct
in_place_index_t
{
explicit
in_place_index_t
(
)
=
default
;
}
;
template
<
size_t I
>
inline
constexpr
in_place_index_t
<
I
>
in_place_index
{
}
;
}