Namespaces
Variants

Standard library header <utility>

From cppreference.net
Standard library headers

Este encabezado es parte de la biblioteca de utilidades generales .

Contenidos

Includes

(C++20)
Soporte para operador de comparación de tres vías
std::initializer_list plantilla de clase

Espacios de nombres

rel_ops Proporciona operadores de comparación automáticos
Definido en el espacio de nombres std::rel_ops
genera automáticamente operadores de comparación basados en operator == y operator < definidos por el usuario
(plantilla de función)

Funciones

intercambia los valores de dos objetos
(plantilla de función)
(C++14)
reemplaza el argumento con un nuevo valor y devuelve su valor anterior
(plantilla de función)
(C++11)
reenvía un argumento de función y utiliza el argumento de plantilla de tipo para preservar su categoría de valor
(plantilla de función)
reenvía un argumento de función como si se convirtiera a la categoría de valor y constancia de la expresión del tipo de argumento de plantilla especificado
(plantilla de función)
(C++11)
convierte el argumento a un xvalue
(plantilla de función)
convierte el argumento a un xvalue si el constructor de movimiento no lanza excepciones
(plantilla de función)
(C++17)
obtiene una referencia const a su argumento
(plantilla de función)
(C++11)
obtiene una referencia a un objeto del argumento de tipo de plantilla para usar en un contexto no evaluado
(plantilla de función)
convierte una enumeración a su tipo subyacente
(plantilla de función)
compara dos valores enteros, asegurando que los números negativos con signo sean menores que los números sin signo
(plantilla de función)
(C++20)
verifica si un valor entero está dentro del rango de un tipo entero dado
(plantilla de función)
marca un punto de ejecución inalcanzable
(función)
crea un objeto pair de tipo, determinado por los tipos de argumento
(plantilla de función)
(eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (C++20)
compara lexicográficamente los valores en el pair
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)
accede a un elemento de un pair
(plantilla de función)

Clases

implementa una tupla binaria, es decir, un par de valores
(class template)
(C++11)
obtiene el número de elementos de un tipo tipo-tupla
(plantilla de clase)
obtiene los tipos de elementos de un tipo tipo-tupla
(plantilla de clase)
obtiene el tamaño de un pair
(especialización de plantilla de clase)
obtiene el tipo de los elementos de pair
(especialización de plantilla de clase)
implementa secuencia de enteros en tiempo de compilación
(plantilla de clase)
Declaraciones anticipadas
Definido en el encabezado <tuple>
(C++11)
implementa un contenedor de tamaño fijo que almacena elementos de posiblemente diferentes tipos
(plantilla de clase)
Definido en el encabezado <variant>
(C++17)
tipo de marcador de posición para usar como la primera alternativa en un variant de tipos no construibles por defecto
(clase)

Constantes

(C++11)
marcador de posición para omitir un elemento al desempaquetar una tuple usando tie
(constante)

Etiquetas

etiqueta de construcción por partes
(etiqueta)
etiqueta de construcción in-place
(etiqueta)
etiqueta de construcción de valor
(etiqueta)

Sinopsis

#include <compare>
#include <initializer_list>
namespace std {
  // swap
  template<class T>
    constexpr void swap(T& a, T& b) noexcept(/* ver descripción */);
  template<class T, size_t N>
    constexpr void swap(T (&a)[N], T (&b)[N]) noexcept(is_nothrow_swappable_v<T>);
  // exchange
  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 /* ver descripción */ 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;   // como operando no evaluado
  // funciones de comparación de enteros
  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;
  // inalcanzable
  [[noreturn]] void unreachable();
  // secuencias de enteros en tiempo de compilación
  template<class T, T...>
    struct integer_sequence;
  template<size_t... I>
    using index_sequence = integer_sequence<size_t, I...>;
  template<class T, T N>
    using make_integer_sequence = integer_sequence<T, /* ver descripción */>;
  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)>;
  // class template pair
  template<class T1, class T2>
    struct pair;
  // algoritmos especializados para 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 /* ver descripción */ make_pair(T1&&, T2&&);
  // tuple-like access to 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;
  // construcción de pares por partes
  struct piecewise_construct_t {
    explicit piecewise_construct_t() = default;
  };
  inline constexpr piecewise_construct_t piecewise_construct{};
  template<class... Tipos> class tuple;         // definido en <tuple>
  // construcción in situ
  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{};
  // etiqueta de argumento no tipo
  template<auto V>
    struct nontype_t {
      explicit nontype_t() = default;
    };
  template<auto V> inline constexpr nontype_t<V> nontype{};
}
// deprecated
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&);
}

Plantilla de clase 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); }
  };
}

Plantilla de clase 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(/* ver descripción */) pair();
    constexpr explicit(/* ver descripción */) pair(const T1& x, const T2& y);
    template<class U1 = T1, class U2 = T2>
      constexpr explicit(/* ver descripción */) pair(U1&& x, U2&& y);
    template<class U1, class U2>
      constexpr explicit(/* ver descripción */) pair(const pair<U1, U2>& p);
    template<class U1, class U2>
      constexpr explicit(/* ver descripción */) 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(/* ver descripción */);
    template<class U1, class U2>
      constexpr pair& operator=(pair<U1, U2>&& p);
    constexpr void swap(pair& p) noexcept(/* ver descripción */);
  };
  template<class T1, class T2>
    pair(T1, T2) -> pair<T1, T2>;
}

Véase también

(C++11)
std::tuple plantilla de clase