[tuple.syn] # 22 General utilities library [[utilities]](./#utilities) ## 22.4 Tuples [[tuple]](tuple#syn) ### 22.4.2 Header synopsis [tuple.syn] [🔗](#header:%3ctuple%3e) // all freestanding#include // see [[compare.syn]](compare.syn "17.12.1 Header synopsis")namespace std {// [[tuple.tuple]](tuple.tuple "22.4.4 Class template tuple"), class template tupletemplateclass tuple; // [[tuple.like]](tuple.like "22.4.3 Concept tuple-like"), concept [*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]")templateconcept [*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") = *see below*; // *exposition only*templateconcept [*pair-like*](#concept:pair-like "22.4.2 Header synopsis [tuple.syn]") = // *exposition only*[*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") && tuple_size_v> == 2; // [[tuple.common.ref]](tuple.common.ref "22.4.10 common_­reference related specializations"), common_reference related specializationstemplate<[*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") TTuple, [*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") UTuple, template class TQual, template class UQual>struct basic_common_reference; template<[*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") TTuple, [*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") UTuple>struct common_type; // ignorestruct *ignore-type* { // *exposition only*constexpr const *ignore-type*&operator=(const auto &) const noexcept { return *this; }}; inline constexpr *ignore-type* ignore; // [[tuple.creation]](tuple.creation "22.4.5 Tuple creation functions"), tuple creation functionstemplateconstexpr tuple...> make_tuple(TTypes&&...); templateconstexpr tuple forward_as_tuple(TTypes&&...) noexcept; templateconstexpr tuple tie(TTypes&...) noexcept; template<[*tuple-like*](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]")... Tuples>constexpr tuple tuple_cat(Tuples&&...); // [[tuple.apply]](tuple.apply "22.4.6 Calling a function with a tuple of arguments"), calling a function with a tuple of argumentstemplateconstexpr apply_result_t apply(F&& f, Tuple&& t)noexcept(is_nothrow_applicable_v); templateconstexpr T make_from_tuple(Tuple&& t); // [[tuple.helper]](tuple.helper "22.4.7 Tuple helper classes"), tuple helper classestemplate struct tuple_size; // *not defined*template struct tuple_size; template struct tuple_size>; template struct tuple_element; // *not defined*template struct tuple_element; templatestruct tuple_element>; templateusing [tuple_element_t](#lib:tuple_element_t "22.4.2 Header synopsis [tuple.syn]") = typename tuple_element::type; // [[tuple.elem]](tuple.elem "22.4.8 Element access"), element accesstemplateconstexpr tuple_element_t>& get(tuple&) noexcept; templateconstexpr tuple_element_t>&& get(tuple&&) noexcept; templateconstexpr const tuple_element_t>& get(const tuple&) noexcept; templateconstexpr const tuple_element_t>&& get(const tuple&&) noexcept; templateconstexpr T& get(tuple& t) noexcept; templateconstexpr T&& get(tuple&& t) noexcept; templateconstexpr const T& get(const tuple& t) noexcept; templateconstexpr const T&& get(const tuple&& t) noexcept; // [[tuple.rel]](tuple.rel "22.4.9 Relational operators"), relational operatorstemplateconstexpr bool operator==(const tuple&, const tuple&); templateconstexpr bool operator==(const tuple&, const UTuple&); templateconstexpr common_comparison_category_t<*synth-three-way-result*...>operator<=>(const tuple&, const tuple&); templateconstexpr *see below* operator<=>(const tuple&, const UTuple&); // [[tuple.traits]](tuple.traits "22.4.11 Tuple traits"), allocator-related traitstemplatestruct uses_allocator, Alloc>; // [[tuple.special]](tuple.special "22.4.12 Tuple specialized algorithms"), specialized algorithmstemplateconstexpr void swap(tuple& x, tuple& y) noexcept(*see below*); templateconstexpr void swap(const tuple& x, const tuple& y) noexcept(*see below*); // [[tuple.helper]](tuple.helper "22.4.7 Tuple helper classes"), tuple helper classestemplateconstexpr size_t [tuple_size_v](#lib:tuple_size_v "22.4.2 Header synopsis [tuple.syn]") = tuple_size::value;}