explicit(see below) constexpr tuple();
explicit(see below) constexpr tuple(const Types&...);
template<class... UTypes> explicit(see below) constexpr tuple(UTypes&&... u);
tuple(const tuple& u) = default;
tuple(tuple&& u) = default;
template<class... UTypes> explicit(see below) constexpr tuple(const tuple<UTypes...>& u);
!conjunction_v<is_convertible<const UTypes&, Types>...>
template<class... UTypes> explicit(see below) constexpr tuple(tuple<UTypes...>&& u);
!conjunction_v<is_convertible<UTypes, Types>...>
template<class U1, class U2> explicit(see below) constexpr tuple(const pair<U1, U2>& u);
!is_convertible_v<const U1&, T> || !is_convertible_v<const U2&, T>
template<class U1, class U2> explicit(see below) constexpr tuple(pair<U1, U2>&& u);
!is_convertible_v<U1, T> || !is_convertible_v<U2, T>
template<class Alloc>
tuple(allocator_arg_t, const Alloc& a);
template<class Alloc>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, const Types&...);
template<class Alloc, class... UTypes>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
template<class Alloc>
tuple(allocator_arg_t, const Alloc& a, const tuple&);
template<class Alloc>
tuple(allocator_arg_t, const Alloc& a, tuple&&);
template<class Alloc, class... UTypes>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
template<class Alloc, class... UTypes>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
template<class Alloc, class U1, class U2>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
template<class Alloc, class U1, class U2>
explicit(see below) tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);