Archivo de encabezado de la biblioteca estándar <concepts>
De cppreference.com
Este archivo de encabezado es parte de la biblioteca de conceptos.
Conceptos | |
Conceptos del lenguaje centrales | |
(C++20) | Especifica que un tipo es el mismo que otro tipo. (concepto) |
(C++20) | Especifica que un tipo se deriva de otro tipo. (concepto) |
(C++20) | Especifica que un tipo es implícitamente convertible a otro tipo. (concepto) |
(C++20) | Especifica que dos tipos comparte un tipo de referencia común. (concepto) |
(C++20) | Especifica que dos tipos comparten un tipo común. (concepto) |
(C++20) | Especifica que un tipo es un tipo entero. (concepto) |
(C++20) | Especifica que un tipo es un tipo entero con signo. (concepto) |
(C++20) | Especifica que un tipo es un tipo entero que no tiene signo. (concepto) |
(C++20) | Especifica que un tipo es un tipo de punto flotante. (concepto) |
(C++20) | Especifica que un tipo es asignable desde otro tipo. (concepto) |
(C++20) | Especifica que un tipo puede ser intercambiado o que dos tipos pueden ser intercambiados uno con el otro. (concepto) |
(C++20) | Especifica que un objeto del tipo puede ser destruido. (concepto) |
(C++20) | Especifica que una variable del tipo puede ser construida desde un conjunto de argumentos o vinculada a un conjunto de argumentos. (concepto) |
(C++20) | Especifica que un objeto de un tipo puede ser construido por defecto. (concepto) |
(C++20) | Especifica que el objeto de un tipo puede construirse usando el constructor de movimiento. (concepto) |
(C++20) | Especifica que un objeto de un tipo puede construirse con el constructor de copia y el constructor de movimiento. (concepto) |
Conceptos de comparación | |
Especifica que el operador == es una relación de equivalencia. (concepto) | |
Especifica que los operadores de comparación sobre el tipo producen un orden total. (concepto) | |
Conceptos de objetos | |
(C++20) | Especifica que un objeto de un tipo puede ser movido e intercambiado. (concepto) |
(C++20) | Especifica que un objeto de un tipo puede ser copiado, movido, e intercambiado. (concepto) |
(C++20) | Especifca que un objeto de un tipo puede ser copiado, movido, intercambiado y construido usando el constructor por defecto. (concepto) |
(C++20) | Especifica que un tipo es regular. Es decir, es tanto semiregular como comparable en igualdad (equality_comparable ). (concepto) |
Conceptos que pueden ser llamados | |
(C++20) | Especifica que un tipo invocable puede invocarse con un conjunto dado de tipos de argumento. (concepto) |
(C++20) | Especifica que un tipo invocable es un predicado Booleano. (concepto) |
(C++20) | Especifica que un tipo invocable es una relación binaria. (concepto) |
(C++20) | Especifica que una relación (relation ) impone una relación de equivalencia. (concepto) |
(C++20) | Especifica que una relación (relation ) impone un ordenamiento estricto débil. (concepto) |
Objetos de punto de personalización | |
(C++20) | Intercambia los valores de dos objetos. (objeto punto de personalización) |
[editar]Sinopsis
namespace std {// conceptos relacionados con el lenguaje// concepto same_astemplate<class T, class U> concept same_as =/* véase descripción */; // concepto derived_fromtemplate<class Derived, class Base> concept derived_from =/* véase descripción */; // concepto convertible_totemplate<class From, class To> concept convertible_to =/* véase descripción */; // concepto common_reference_withtemplate<class T, class U> concept common_reference_with =/* véase descripción */; // concepto common_withtemplate<class T, class U> concept common_with =/* véase descripción */; // conceptos aritméticostemplate<class T> concept integral =/* véase descripción */;template<class T> concept signed_integral =/* véase descripción */;template<class T> concept unsigned_integral =/* véase descripción */;template<class T> concept floating_point =/* véase descripción */; // concepto assignable_fromtemplate<class LHS, class RHS> concept assignable_from =/* véase descripción */; // concepto swappablenamespace ranges {inlinenamespace/* unspecified */{inlineconstexpr/* unspecified */ swap =/* unspecified */;}}template<class T> concept swappable =/* véase descripción */;template<class T, class U> concept swappable_with =/* véase descripción */; // concepto destructibletemplate<class T> concept destructible =/* véase descripción */; // concepto constructible_fromtemplate<class T, class... Args> concept constructible_from =/* véase descripción */; // concepto default_initializabletemplate<class T> concept default_initializable =/* véase descripción */; // concepto move_constructibletemplate<class T> concept move_constructible =/* véase descripción */; // concepto copy_constructibletemplate<class T> concept copy_constructible =/* véase descripción */; // conceptos de comparación// concepto equality_comparabletemplate<class T> concept equality_comparable =/* véase descripción */;template<class T, class U> concept equality_comparable_with =/* véase descripción */; // concepto totally_orderedtemplate<class T> concept totally_ordered =/* véase descripción */;template<class T, class U> concept totally_ordered_with =/* véase descripción */; // conceptos de objetostemplate<class T> concept movable =/* véase descripción */;template<class T> concept copyable =/* véase descripción */;template<class T> concept semiregular =/* véase descripción */;template<class T> concept regular =/* véase descripción */; // conceptos que pueden ser llamados// concepto invocabletemplate<class F, class... Args> concept invocable =/* véase descripción */; // concepto regular_invocabletemplate<class F, class... Args> concept regular_invocable =/* véase descripción */; // concepto predicatetemplate<class F, class... Args> concept predicate =/* véase descripción */; // concepto relationtemplate<class R, class T, class U> concept relation =/* véase descripción */; // concepto equivalence_relationtemplate<class R, class T, class U> concept equivalence_relation =/* véase descripción */; // concepto strict_weak_ordertemplate<class R, class T, class U> concept strict_weak_order =/* véase descripción */;}
[editar]Concepto same_as
template<class T, class U> concept __SameImpl = is_same_v<T, U>;// exposition only template<class T, class U> concept same_as = __SameImpl<T, U>&& __SameImpl<U, T>;
[editar]Concepto derived_from
template<class Derived, class Base> concept derived_from = is_base_of_v<Base, Derived>&& is_convertible_v<constvolatile Derived*, constvolatile Base*>;
[editar]Concepto convertible_to
template<class From, class To> concept convertible_to = is_convertible_v<From, To>&& requires(From (&f)()){static_cast<To>(f());};
[editar]Concepto common_reference_with
template<class T, class U> concept common_reference_with = same_as<common_reference_t<T, U>, common_reference_t<U, T>>&& convertible_to<T, common_reference_t<T, U>>&& convertible_to<U, common_reference_t<T, U>>;
[editar]Concepto common_with
template<class T, class U> concept common_with = same_as<common_type_t<T, U>, common_type_t<U, T>>&& requires {static_cast<common_type_t<T, U>>(declval<T>());static_cast<common_type_t<T, U>>(declval<U>());}&& common_reference_with< add_lvalue_reference_t<const T>, add_lvalue_reference_t<const U>>&& common_reference_with< add_lvalue_reference_t<common_type_t<T, U>>, common_reference_t< add_lvalue_reference_t<const T>, add_lvalue_reference_t<const U>>>;
[editar]Concepto integral
template<class T> concept integral = is_integral_v<T>;
[editar]Concepto signed_integral
template<class T> concept signed_integral = integral<T>&& is_signed_v<T>;
[editar]Concepto unsigned_integral
template<class T> concept unsigned_integral = integral<T>&&!signed_integral<T>;
[editar]Concepto floating_point
template<class T> concept floating_point = is_floating_point_v<T>;
[editar]Concepto assignable_from
template<class LHS, class RHS> concept assignable_from = is_lvalue_reference_v<LHS>&& common_reference_with<const remove_reference_t<LHS>&, const remove_reference_t<RHS>&>&& requires(LHS lhs, RHS&& rhs){{ lhs =std::forward<RHS>(rhs)}-> same_as<LHS>;
[editar]Concepto swappable
template<class T> concept swappable = requires(T& a, T& b){ranges::swap(a, b);};
[editar]Concepto swappable_with
template<class T, class U> concept swappable_with = common_reference_with<const remove_reference_t<T>&, const remove_reference_t<U>&>&& requires(T&& t, U&& u){ranges::swap(std::forward<T>(t), std::forward<T>(t));ranges::swap(std::forward<U>(u), std::forward<U>(u));ranges::swap(std::forward<T>(t), std::forward<U>(u));ranges::swap(std::forward<U>(u), std::forward<T>(t));};
[editar]Concepto destructible
template<class T> concept destructible = is_nothrow_destructible_v<T>;
[editar]Concepto constructible_from
template<class T, class... Args> concept constructible_from = destructible<T>&& is_constructible_v<T, Args...>;
[editar]Concepto default_initializable
template<class T>inlineconstexprbool __is_default_initializable =/* véase descripción */;// exposition only template<class T> concept default_initializable = constructible_from<T>&& requires{ T{};}&& __is_default_initializable<T>;
[editar]Concepto move_constructible
template<class T> concept move_constructible = constructible_from<T, T>&& convertible_to<T, T>;
[editar]Concepto copy_constructible
template<class T> concept copy_constructible = move_constructible<T>&& constructible_from<T, T&>&& convertible_to<T&, T>&& constructible_from<T, const T&>&& convertible_to<const T&, T>&& constructible_from<T, const T>&& convertible_to<const T, T>;
[editar]Concepto equality_comparable
template<class T, class U> concept __WeaklyEqualityComparableWith =// exposition only requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u){{ t == u }->boolean-testable;{ t != u }->boolean-testable;{ u == t }->boolean-testable;{ u != t }->boolean-testable;}; template<class T> concept equality_comparable = __WeaklyEqualityComparableWith<T, T>;
[editar]Concepto equality_comparable_with
template<class T, class U> concept equality_comparable_with = equality_comparable<T>&& equality_comparable<U>&& common_reference_with<const remove_reference_t<T>&, const remove_reference_t<U>&>&& equality_comparable< common_reference_t<const remove_reference_t<T>&, const remove_reference_t<U>&>>&& __WeaklyEqualityComparableWith<T, U>;
[editar]Concepto totally_ordered
template<class T> concept totally_ordered = equality_comparable<T>&& requires(const remove_reference_t<T>& a, const remove_reference_t<T>& b){{ a < b }->boolean-testable;{ a > b }->boolean-testable;{ a <= b }->boolean-testable;{ a >= b }->boolean-testable;};
[editar]Concepto totally_ordered_with
template<class T, class U> concept totally_ordered_with = totally_ordered<T>&& totally_ordered<U>&& common_reference_with<const remove_reference_t<T>&, const remove_reference_t<U>&>&& totally_ordered< common_reference_t<const remove_reference_t<T>&, const remove_reference_t<U>&>>&& equality_comparable_with<T, U>&& requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u){{ t < u }->boolean-testable;{ t > u }->boolean-testable;{ t <= u }->boolean-testable;{ t >= u }->boolean-testable;{ u < t }->boolean-testable;{ u > t }->boolean-testable;{ u <= t }->boolean-testable;{ u >= t }->boolean-testable;};
[editar]Concepto movable
template<class T> concept movable = is_object_v<T>&& move_constructible<T>&& assignable_from<T&, T>&& swappable<T>;
[editar]Concepto copyable
template<class T> concept copyable = copy_constructible<T>&& movable<T>&& assignable_from<T&, const T&>;
[editar]Concepto semiregular
template<class T> concept semiregular = copyable<T>&& default_initializable<T>;
[editar]Concepto regular
template<class T> concept regular = semiregular<T>&& equality_comparable<T>;
[editar]Concepto invocable
template<class F, class... Args> concept invocable = requires(F&& f, Args&&... args){ invoke(std::forward<F>(f), std::forward<Args>(args)...);// no se requiere que sea preservador de igualdad};
[editar]Concepto regular_invocable
template<class F, class... Args> concept regular_invocable = invocable<F, Args...>;
[editar]Concepto predicate
template<class F, class... Args> concept predicate = regular_invocable<F, Args...>&&boolean-testable<invoke_result_t<F, Args...>>;
[editar]Concepto relation
template<class R, class T, class U> concept relation = predicate<R, T, T>&& predicate<R, U, U>&& predicate<R, T, U>&& predicate<R, U, T>;
[editar]Concepto equivalence_relation
template<class R, class T, class U> concept equivalence_relation = relation<R, T, U>;
[editar]Concepto strict_weak_order
template<class R, class T, class U> concept strict_weak_order = relation<R, T, U>;