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 noexcept(see below); template<class. UTypes> constexpr explicit(see below) tuple(UTypes&&.) / only if sizeof...(Types) >= 1 noexcept(see below); 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..>; }
If a program declares an explicit or partial specialization of tuple, the program is ill-formed, no diagnostic required.

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant