Namespaces
Variants

Standard library header <utility>

From cppreference.net
Standard library headers

Этот заголовок является частью библиотеки общих утилит .

Содержание

Включения

(C++20)
Поддержка оператора трёхстороннего сравнения
std::initializer_list шаблон класса

Пространства имён

rel_ops Предоставляет автоматические операторы сравнения
Определено в пространстве имён std::rel_ops
автоматически генерирует операторы сравнения на основе пользовательских operator == и operator <
(шаблон функции)

Функции

обменивает значения двух объектов
(шаблон функции)
(C++14)
заменяет аргумент новым значением и возвращает его предыдущее значение
(шаблон функции)
(C++11)
перенаправляет аргумент функции и использует тип шаблона для сохранения его категории значения
(шаблон функции)
перенаправляет аргумент функции так, как если бы он приводился к категории значения и константности выражения указанного типа шаблона
(шаблон функции)
(C++11)
преобразует аргумент в xvalue
(шаблон функции)
преобразует аргумент в xvalue, если конструктор перемещения не выбрасывает исключений
(шаблон функции)
(C++17)
получает ссылку на const своего аргумента
(шаблон функции)
(C++11)
получает ссылку на объект шаблонного типа аргумента для использования в невычисляемом контексте
(шаблон функции)
преобразует перечисление в его базовый тип
(шаблон функции)
сравнивает два целочисленных значения, гарантируя, что знаковые отрицательные числа меньше беззнаковых чисел
(шаблон функции)
(C++20)
проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа
(шаблон функции)
отмечает недостижимую точку выполнения
(функция)
создаёт объект pair типа, определяемого типами аргументов
(шаблон функции)
(удалено в C++20) (удалено в C++20) (удалено в C++20) (удалено в C++20) (удалено в C++20) (C++20)
лексикографически сравнивает значения в pair
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
предоставляет доступ к элементу pair
(шаблон функции)

Классы

реализует бинарный кортеж, т.е. пару значений
(шаблон класса)
(C++11)
получает количество элементов кортежеподобного типа
(шаблон класса)
получает типы элементов кортежеподобного типа
(шаблон класса)
получает размер pair
(специализация шаблона класса)
получает тип элементов pair
(специализация шаблона класса)
реализует последовательность целых чисел времени компиляции
(шаблон класса)
Форвардные декларации
Определено в заголовочном файле <tuple>
(C++11)
реализует контейнер фиксированного размера, содержащий элементы возможно разных типов
(шаблон класса)
Определено в заголовочном файле <variant>
(C++17)
тип-заполнитель для использования в качестве первой альтернативы в variant для недефолтно-конструируемых типов
(класс)

Константы

(C++11)
заполнитель для пропуска элемента при распаковке tuple с использованием tie
(константа)

Теги

тег кусочного построения
(тег)
тег для конструирования на месте
(тег)
тег конструирования значения
(тег)

Синопсис

#include <compare>
#include <initializer_list>
namespace std {
  // swap
  template<class T>
    constexpr void swap(T& a, T& b) noexcept(/* см. описание */);
  template<class T, size_t N>
    constexpr void swap(T (&a)[N], T (&b)[N]) noexcept(is_nothrow_swappable_v<T>);
  // обмен
  template<class T, class U = T>
    constexpr T exchange(T& obj, U&& new_val);
  // forward/move
  template<class T>
    constexpr T&& forward(remove_reference_t<T>& t) noexcept;
  template<class T>
    constexpr T&& forward(remove_reference_t<T>&& t) noexcept;
  template<class T, class U>
    constexpr /* см. описание */ forward_like(U&& x) noexcept;
  template<class T>
    constexpr remove_reference_t<T>&& move(T&&) noexcept;
  template<class T>
    constexpr conditional_t<
        !is_nothrow_move_constructible_v<T> && is_copy_constructible_v<T>, const T&, T&&>
      move_if_noexcept(T& x) noexcept;
  // as_const
  template<class T>
    constexpr add_const_t<T>& as_const(T& t) noexcept;
  template<class T>
    void as_const(const T&&) = delete;
  // declval
  template<class T>
    add_rvalue_reference_t<T> declval() noexcept;   // как невычисляемый операнд
  // функции сравнения целых чисел
  template<class T, class U>
    constexpr bool cmp_equal(T t, U u) noexcept;
  template<class T, class U>
    constexpr bool cmp_not_equal(T t, U u) noexcept;
  template<class T, class U>
    constexpr bool cmp_less(T t, U u) noexcept;
  template<class T, class U>
    constexpr bool cmp_greater(T t, U u) noexcept;
  template<class T, class U>
    constexpr bool cmp_less_equal(T t, U u) noexcept;
  template<class T, class U>
    constexpr bool cmp_greater_equal(T t, U u) noexcept;
  template<class R, class T>
    constexpr bool in_range(T t) noexcept;
  // to_underlying
  template<class T>
    constexpr underlying_type_t<T> to_underlying(T value) noexcept;
  // недостижимо
  [[noreturn]] void unreachable();
  // целочисленные последовательности времени компиляции
  template<class T, T...>
    struct integer_sequence;
  template<size_t... Я>
    using index_sequence = integer_sequence<size_t, I...>;
  template<class T, T N>
    using make_integer_sequence = integer_sequence<T, /* см. описание */>;
  template<size_t N>
    using make_index_sequence = make_integer_sequence<size_t, N>;
  template<class... T>
    using index_sequence_for = make_index_sequence<sizeof...(T)>;
  // шаблон класса pair
  template<class T1, class T2>
    struct pair;
  // специализированные алгоритмы для pair
  template<class T1, class T2>
    constexpr bool operator==(const pair<T1, T2>&, const pair<T1, T2>&);
  template<class T1, class T2>
    constexpr common_comparison_category_t</*synth-three-way-result*/<T1>,
                                           /*synth-three-way-result*/<T2>>
      operator<=>(const pair<T1, T2>&, const pair<T1, T2>&);
  template<class T1, class T2>
    constexpr void swap(pair<T1, T2>& x, pair<T1, T2>& y) noexcept(noexcept(x.swap(y)));
  template<class T1, class T2>
    constexpr /* см. описание */ make_pair(T1&&, T2&&);
  // кортежеподобный доступ к pair
  template<class T> struct tuple_size;
  template<size_t I, class T> struct tuple_element;
  template<class T1, class T2> struct tuple_size<pair<T1, T2>>;
  template<size_t I, class T1, class T2> struct tuple_element<I, pair<T1, T2>>;
  template<size_t I, class T1, class T2>
    constexpr tuple_element_t<I, pair<T1, T2>>& get(pair<T1, T2>&) noexcept;
  template<size_t I, class T1, class T2>
    constexpr tuple_element_t<I, pair<T1, T2>>&& get(pair<T1, T2>&&) noexcept;
  template<size_t I, class T1, class T2>
    constexpr const tuple_element_t<I, pair<T1, T2>>& get(const pair<T1, T2>&) noexcept;
  template<size_t I, class T1, class T2>
    constexpr const tuple_element_t<I, pair<T1, T2>>&& get(const pair<T1, T2>&&) noexcept;
  template<class T1, class T2>
    constexpr T1& get(pair<T1, T2>& p) noexcept;
  template<class T1, class T2>
    constexpr const T1& get(const pair<T1, T2>& p) noexcept;
  template<class T1, class T2>
    constexpr T1&& get(pair<T1, T2>&& p) noexcept;
  template<class T1, class T2>
    constexpr const T1&& get(const pair<T1, T2>&& p) noexcept;
  template<class T2, class T1>
    constexpr T2& get(pair<T1, T2>& p) noexcept;
  template<class T2, class T1>
    constexpr const T2& get(const pair<T1, T2>& p) noexcept;
  template<class T2, class T1>
    constexpr T2&& get(pair<T1, T2>&& p) noexcept;
  template<class T2, class T1>
    constexpr const T2&& get(const pair<T1, T2>&& p) noexcept;
  // построение pair по частям
  struct piecewise_construct_t {
    explicit piecewise_construct_t() = default;
  };
  inline constexpr piecewise_construct_t piecewise_construct{};
  template<class... Типы> class tuple;         // определено в <tuple>
  // in-place construction
  struct in_place_t {
    explicit in_place_t() = default;
  };
  inline constexpr in_place_t in_place{};
  template<class T>
    struct in_place_type_t {
      explicit in_place_type_t() = default;
    };
  template<class T> inline constexpr in_place_type_t<T> in_place_type{};
  template<size_t I>
    struct in_place_index_t {
      explicit in_place_index_t() = default;
    };
  template<size_t I> inline constexpr in_place_index_t<I> in_place_index{};
  // нетиповой аргумент тег
  template<auto V>
    struct nontype_t {
      explicit nontype_t() = default;
    };
  template<auto V> inline constexpr nontype_t<V> nontype{};
}
// устаревший
namespace std::rel_ops {
  template<class T> bool operator!=(const T&, const T&);
  template<class T> bool operator> (const T&, const T&);
  template<class T> bool operator<=(const T&, const T&);
  template<class T> bool operator>=(const T&, const T&);
}

Шаблон класса std::integer_sequence

namespace std {
  template<class T, T... I> struct integer_sequence {
    using value_type = T;
    static constexpr size_t size() noexcept { return sizeof...(I); }
  };
}

Шаблон класса std::pair

namespace std {
  template<class T1, class T2>
  struct pair {
    using first_type  = T1;
    using second_type = T2;
    T1 first;
    T2 second;
    pair(const pair&) = default;
    pair(pair&&) = default;
    constexpr explicit(/* см. описание */) pair();
    constexpr explicit(/* см. описание */) pair(const T1& x, const T2& y);
    template<class U1 = T1, class U2 = T2>
      constexpr explicit(/* см. описание */) pair(U1&& x, U2&& y);
    template<class U1, class U2>
      constexpr explicit(/* см. описание */) pair(const pair<U1, U2>& p);
    template<class U1, class U2>
      constexpr explicit(/* см. описание */) pair(pair<U1, U2>&& p);
    template<class... Args1, class... Args2>
      constexpr pair(piecewise_construct_t,
                     tuple<Args1...> first_args, tuple<Args2...> second_args);
    constexpr pair& operator=(const pair& p);
    template<class U1, class U2>
      constexpr pair& operator=(const pair<U1, U2>& p);
    constexpr pair& operator=(pair&& p) noexcept(/* см. описание */);
    template<class U1, class U2>
      constexpr pair& operator=(pair<U1, U2>&& p);
    constexpr void swap(pair& p) noexcept(/* см. описание */);
  };
  template<class T1, class T2>
    pair(T1, T2) -> pair<T1, T2>;
}

Смотрите также

(C++11)
std::tuple шаблон класса