Standard library header <experimental/ranges/utility>

From cppreference.com
< cpplrm; | header

This header is part of the ranges library.

Utility components

Defined in namespace std::experimental::ranges
swaps the value of two objects
(customization point object)
replaces the argument with a new value and returns its previous value
(function template)

Tagged pairs

Defined in namespace std::experimental::ranges
specifies that a type is a tag specifier
(concept)
specifies that a type represents a tag specifier and its element type
(concept)
augument a tuple-like type with named accessors
(class template)
alias template for a tagged std::pair
(alias template)
convenience function for creating a tagged_pair
(function template)

Synopsis

namespace std { namespace experimental { namespace ranges { inline namespace v1 {

namespace {
    constexpr /* unspecified */ swap = /* unspecified */;
} 

template<ranges::MoveConstructible T, class U = T>
    requires ranges::Assignable<T&, U>
constexpr T exchange(T& obj, U&& new_val) noexcept(/* see definition */);

template <class T>
concept bool TagSpecifier = /* see definition */;
template <class F>
concept bool TaggedType = /* see definition */;
template <class Base, TagSpecifier... Tags>
    requires sizeof...(Tags) <= std::tuple_size<Base>::value
struct tagged;

template <ranges::TaggedType T1, ranges::TaggedType T2>
using tagged_pair = /* see definition */;

template <ranges::TagSpecifier Tag1, ranges::TagSpecifier Tag2, class T1, class T2>
constexpr /* see definition */ make_tagged_pair(T1&& x, T2&& y);

}}}}

namespace std {

template <class Base, class... Tags>
struct tuple_size<std::experimental::ranges::tagged<Base, Tags...>>;

template <size_t N, class Base, class... Tags>
struct tuple_element<N, std::experimental::ranges::tagged<Base, Tags...>>;

}