22
General utilities library
[utilities]
22.4
Tuples
[tuple]
22.4.4
Class template
tuple
[tuple.tuple]
22.4.4.1
General
[tuple.tuple.general]
🔗
namespace
std
{
template
<
class
.
.
.
Types
>
class
tuple
{
public
:
//
[tuple.
cnstr]
,
tuple
construction
constexpr
explicit
(
see below
)
tuple
(
)
;
constexpr
explicit
(
see below
)
tuple
(
const
Types
&
.
.
.
)
;
// only if
sizeof...(Types) >= 1
template
<
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
UTypes
&
&
.
.
.
)
;
// only if
sizeof...(Types) >= 1
tuple
(
const
tuple
&
)
=
default
; tuple
(
tuple
&
&
)
=
default
;
template
<
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
tuple
<
UTypes
.
.
.
>
&
)
;
template
<
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
const
tuple
<
UTypes
.
.
.
>
&
)
;
template
<
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
tuple
<
UTypes
.
.
.
>
&
&
)
;
template
<
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
const
tuple
<
UTypes
.
.
.
>
&
&
)
;
template
<
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
pair
<
U1, U2
>
&
)
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
const
pair
<
U1, U2
>
&
)
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
pair
<
U1, U2
>
&
&
)
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
const
pair
<
U1, U2
>
&
&
)
;
// only if
sizeof...(Types) == 2
template
<
tuple-like
UTuple
>
constexpr
explicit
(
see below
)
tuple
(
UTuple
&
&
)
;
// allocator-extended constructors
template
<
class
Alloc
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a
)
;
template
<
class
Alloc
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
Types
&
.
.
.
)
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, UTypes
&
&
.
.
.
)
;
template
<
class
Alloc
>
constexpr
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
tuple
&
)
;
template
<
class
Alloc
>
constexpr
tuple
(
allocator_arg_t,
const
Alloc
&
a, tuple
&
&
)
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, tuple
<
UTypes
.
.
.
>
&
)
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
tuple
<
UTypes
.
.
.
>
&
)
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, tuple
<
UTypes
.
.
.
>
&
&
)
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
tuple
<
UTypes
.
.
.
>
&
&
)
;
template
<
class
Alloc,
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, pair
<
U1, U2
>
&
)
;
template
<
class
Alloc,
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
pair
<
U1, U2
>
&
)
;
template
<
class
Alloc,
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, pair
<
U1, U2
>
&
&
)
;
template
<
class
Alloc,
class
U1,
class
U2
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a,
const
pair
<
U1, U2
>
&
&
)
;
template
<
class
Alloc,
tuple-like
UTuple
>
constexpr
explicit
(
see below
)
tuple
(
allocator_arg_t,
const
Alloc
&
a, UTuple
&
&
)
;
//
[tuple.
assign]
,
tuple
assignment
constexpr
tuple
&
operator
=
(
const
tuple
&
)
;
constexpr
const
tuple
&
operator
=
(
const
tuple
&
)
const
;
constexpr
tuple
&
operator
=
(
tuple
&
&
)
noexcept
(
see below
)
;
constexpr
const
tuple
&
operator
=
(
tuple
&
&
)
const
;
template
<
class
.
.
.
UTypes
>
constexpr
tuple
&
operator
=
(
const
tuple
<
UTypes
.
.
.
>
&
)
;
template
<
class
.
.
.
UTypes
>
constexpr
const
tuple
&
operator
=
(
const
tuple
<
UTypes
.
.
.
>
&
)
const
;
template
<
class
.
.
.
UTypes
>
constexpr
tuple
&
operator
=
(
tuple
<
UTypes
.
.
.
>
&
&
)
;
template
<
class
.
.
.
UTypes
>
constexpr
const
tuple
&
operator
=
(
tuple
<
UTypes
.
.
.
>
&
&
)
const
;
template
<
class
U1,
class
U2
>
constexpr
tuple
&
operator
=
(
const
pair
<
U1, U2
>
&
)
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
const
tuple
&
operator
=
(
const
pair
<
U1, U2
>
&
)
const
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
tuple
&
operator
=
(
pair
<
U1, U2
>
&
&
)
;
// only if
sizeof...(Types) == 2
template
<
class
U1,
class
U2
>
constexpr
const
tuple
&
operator
=
(
pair
<
U1, U2
>
&
&
)
const
;
// only if
sizeof...(Types) == 2
template
<
tuple-like
UTuple
>
constexpr
tuple
&
operator
=
(
UTuple
&
&
)
;
template
<
tuple-like
UTuple
>
constexpr
const
tuple
&
operator
=
(
UTuple
&
&
)
const
;
//
[tuple.
swap]
,
tuple
swap
constexpr
void
swap
(
tuple
&
)
noexcept
(
see below
)
;
constexpr
void
swap
(
const
tuple
&
)
const
noexcept
(
see below
)
;
}
;
template
<
class
.
.
.
UTypes
>
tuple
(
UTypes
.
.
.
)
-
>
tuple
<
UTypes
.
.
.
>
;
template
<
class
T1,
class
T2
>
tuple
(
pair
<
T1, T2
>
)
-
>
tuple
<
T1, T2
>
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
tuple
(
allocator_arg_t, Alloc, UTypes
.
.
.
)
-
>
tuple
<
UTypes
.
.
.
>
;
template
<
class
Alloc,
class
T1,
class
T2
>
tuple
(
allocator_arg_t, Alloc, pair
<
T1, T2
>
)
-
>
tuple
<
T1, T2
>
;
template
<
class
Alloc,
class
.
.
.
UTypes
>
tuple
(
allocator_arg_t, Alloc, tuple
<
UTypes
.
.
.
>
)
-
>
tuple
<
UTypes
.
.
.
>
;
}
1
#
If a program declares an explicit or partial specialization of
tuple
, the program is ill-formed, no diagnostic required
.