constexpr explicit(see below) tuple();
constexpr explicit(see below) tuple(const Types&.)
noexcept(is_nothrow_copy_constructible_v<Types> && ..);
template<class. UTypes> constexpr explicit(see below) tuple(UTypes&&. u)
noexcept(is_nothrow_constructible_v<Types, UTypes> && ..);
tuple(const tuple& u) = default;
tuple(tuple&& u) = default;
template<class. UTypes> constexpr explicit(see below) tuple(tuple<UTypes..>& u);
template<class. UTypes> constexpr explicit(see below) tuple(const tuple<UTypes..>& u);
template<class. UTypes> constexpr explicit(see below) tuple(tuple<UTypes..>& u);
template<class. UTypes> constexpr explicit(see below) tuple(const tuple<UTypes..>& u);
template<class U1, class U2> constexpr explicit(see below) tuple(pair<U1, U2>& u);
template<class U1, class U2> constexpr explicit(see below) tuple(const pair<U1, U2>& u);
template<class U1, class U2> constexpr explicit(see below) tuple(pair<U1, U2>& u);
template<class U1, class U2> constexpr explicit(see below) tuple(const pair<U1, U2>& u);
template<tuple-like UTuple>
constexpr explicit(see below) tuple(UTuple&& u);
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&&);
constexpr tuple& operator=(const tuple& u);
constexpr const tuple& operator=(const tuple& u) const;
constexpr tuple& operator=(tuple&& u) noexcept(see below);
constexpr const tuple& operator=(tuple&& u) const;
template<class. UTypes> constexpr tuple& operator=(const tuple<UTypes..>& u);
template<class. UTypes> constexpr const tuple& operator=(const tuple<UTypes..>& u) const;
template<class. UTypes> constexpr tuple& operator=(tuple<UTypes..>& u);
template<class. UTypes> constexpr const tuple& operator=(tuple<UTypes..>& u) const;
template<class U1, class U2> constexpr tuple& operator=(const pair<U1, U2>& u);
template<class U1, class U2> constexpr const tuple& operator=(const pair<U1, U2>& u) const;
template<class U1, class U2> constexpr tuple& operator=(pair<U1, U2>& u);
template<class U1, class U2> constexpr const tuple& operator=(pair<U1, U2>& u) const;
template<tuple-like UTuple>
constexpr tuple& operator=(UTuple&& u);
template<tuple-like UTuple>
constexpr const tuple& operator=(UTuple&& u) const;
constexpr void swap(tuple& rhs) noexcept(see below);
constexpr void swap(const tuple& rhs) const noexcept(see below);