Standard library header <concepts> (C++20)
From cppreference.net
Cet en-tête fait partie de la bibliothèque concepts .
Concepts |
|
Concepts fondamentaux du langage |
|
|
(C++20)
|
spécifie qu'un type est identique à un autre type
(concept) |
|
(C++20)
|
spécifie qu'un type est dérivé d'un autre type
(concept) |
|
(C++20)
|
spécifie qu'un type est implicitement convertible en un autre type
(concept) |
|
(C++20)
|
spécifie que deux types partagent un type de référence commun
(concept) |
|
(C++20)
|
spécifie que deux types partagent un type commun
(concept) |
|
(C++20)
|
spécifie qu'un type est un type intégral
(concept) |
|
(C++20)
|
spécifie qu'un type est un type entier signé
(concept) |
|
(C++20)
|
spécifie qu'un type est un type intégral non signé
(concept) |
|
(C++20)
|
spécifie qu'un type est un type à virgule flottante
(concept) |
|
(C++20)
|
spécifie qu'un type peut être assigné à partir d'un autre type
(concept) |
|
(C++20)
|
spécifie qu'un type peut être échangé ou que deux types peuvent être échangés l'un avec l'autre
(concept) |
|
(C++20)
|
spécifie qu'un objet du type peut être détruit
(concept) |
|
(C++20)
|
spécifie qu'une variable du type peut être construite à partir ou liée à un ensemble de types d'arguments
(concept) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être construit par défaut
(concept) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être construit par déplacement
(concept) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être copié et déplacé par construction
(concept) |
Concepts de comparaison |
|
|
spécifie que l'opérateur
==
est une relation d'équivalence
(concept) |
|
|
spécifie que les opérateurs de comparaison sur le type produisent un ordre total
(concept) |
|
Concepts d'objet |
|
|
(C++20)
|
spécifie qu'un objet d'un type peut être déplacé et échangé
(concept) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être copié, déplacé et échangé
(concept) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être copié, déplacé, échangé et construit par défaut
(concept) |
|
(C++20)
|
spécifie qu'un type est régulier, c'est-à-dire qu'il est à la fois
semiregular
et
equality_comparable
(concept) |
Concepts appelables |
|
|
(C++20)
|
spécifie qu'un type appelable peut être invoqué avec un ensemble donné de types d'arguments
(concept) |
|
(C++20)
|
spécifie qu'un type appelable est un prédicat booléen
(concept) |
|
(C++20)
|
spécifie qu'un type appelable est une relation binaire
(concept) |
|
(C++20)
|
spécifie qu'une
relation
impose une relation d'équivalence
(concept) |
|
(C++20)
|
spécifie qu'une
relation
impose un ordre strict faible
(concept) |
Objets de point de personnalisation |
|
|
(C++20)
|
échange les valeurs de deux objets
(point de personnalisation d'objet) |
Synopsis
// tous freestanding namespace std { // concepts liés au langage // concept same_as template<class T, class U> concept same_as = /* voir description */; // concept derived_from template<class Derived, class Base> concept derived_from = /* voir description */; // concept convertible_to template<class From, class To> concept convertible_to = /* voir description */; // concept common_reference_with template<class T, class U> concept common_reference_with = /* voir description */; // concept common_with template<class T, class U> concept common_with = /* voir description */; // concepts arithmétiques template<class T> concept integral = /* voir description */; template<class T> concept signed_integral = /* voir description */; template<class T> concept unsigned_integral = /* voir description */; template<class T> concept floating_point = /* voir description */; // concept assignable_from template<class LHS, class RHS> concept assignable_from = /* voir description */; // concept swappable namespace ranges { inline namespace /* non spécifié */ { inline constexpr /* non spécifié */ swap = /* non spécifié */; } } template<class T> concept swappable = /* voir description */; template<class T, class U> concept swappable_with = /* voir description */; // concept destructible template<class T> concept destructible = /* voir description */; // concept constructible_from template<class T, class... Args> concept constructible_from = /* voir description */; // concept default_initializable template<class T> concept default_initializable = /* voir description */; // concept move_constructible template<class T> concept move_constructible = /* voir description */; // concept copy_constructible template<class T> concept copy_constructible = /* voir description */; // concepts de comparaison // concept equality_comparable template<class T> concept equality_comparable = /* voir description */; template<class T, class U> concept equality_comparable_with = /* voir description */; // concept totally_ordered template<class T> concept totally_ordered = /* voir description */; template<class T, class U> concept totally_ordered_with = /* voir description */; // concepts d'objet template<class T> concept movable = /* voir description */; template<class T> concept copyable = /* voir description */; template<class T> concept semiregular = /* voir description */; template<class T> concept regular = /* voir description */; // concepts appelables // concept invocable template<class F, class... Args> concept invocable = /* voir description */; // concept regular_invocable template<class F, class... Args> concept regular_invocable = /* voir description */; // concept predicate template<class F, class... Args> concept predicate = /* voir description */; // concept relation template<class R, class T, class U> concept relation = /* voir description */; // concept equivalence_relation template<class R, class T, class U> concept equivalence_relation = /* voir description */; // concept strict_weak_order template<class R, class T, class U> concept strict_weak_order = /* voir description */; }
Concept auxiliaire
boolean-testable
template<class T> concept /*boolean-testable-impl*/ = convertible_to<T, bool>; // exposition uniquement; template<class T> concept boolean-testable = // exposition uniquement /*boolean-testable-impl*/<T> && requires(T&& t) { { !std::forward<T>(t) } -> /*boolean-testable-impl*/; };
Concept
same_as
template<class T, class U> concept /*same-as-impl*/ = is_same_v<T, U>; // exposition uniquement template<class T, class U> concept same_as = /*same-as-impl*/<T, U> && /*same-as-impl*/<U, T>;
Concept
derived_from
template<class Derived, class Base> concept derived_from = is_base_of_v<Base, Derived> && is_convertible_v<const volatile Derived*, const volatile Base*>;
Concept
convertible_to
template<class From, class To> concept convertible_to = is_convertible_v<From, To> && requires { static_cast<To>(declval<From>()); };
Concept
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>>;
` et contient des termes spécifiques au C++ qui doivent être préservés. Le texte à traduire était uniquement constitué des instructions en anglais, qui ont été suivies pour produire cette réponse.
Concept
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>>>;
Concept
integral
template<class T> concept integral = is_integral_v<T>;
Concept
signed_integral
template<class T> concept signed_integral = integral<T> && is_signed_v<T>;
` et contient des termes spécifiques au C++. Le reste du contenu textuel a été préservé tel quel, car il n'y a pas d'autre texte à traduire en dehors du code.
Concept
unsigned_integral
template<class T> concept unsigned_integral = integral<T> && !signed_integral<T>;
Concept
floating_point
template<class T> concept floating_point = is_floating_point_v<T>;
Concept
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>; };
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte environnant (s'il y en avait) aurait été traduit en français.
Concept
swappable
template<class T> concept swappable = requires(T& a, T& b) { ranges::swap(a, b); };
Concept
swappable_with
template<class T, class U> concept swappable_with = common_reference_with<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)); };
Concept
destructible
template<class T> concept destructible = is_nothrow_destructible_v<T>;
Concept
constructible_from
template<class T, class... Args> concept constructible_from = destructible<T> && is_constructible_v<T, Args...>;
Concept
default_initializable
template<class T> constexpr bool /*est-initialisable-par-défaut*/ = /* voir description */; // exposition uniquement template<class T> concept default_initializable = constructible_from<T> && requires { T{}; } && /*est-initialisable-par-défaut*/<T>;
Concept
move_constructible
template<class T> concept move_constructible = constructible_from<T, T> && convertible_to<T, T>;
Concept
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>;
Concept
equality_comparable
template<class T, class U> concept /*weakly-equality-comparable-with*/ = // à titre d'exposition uniquement 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 = /*weakly-equality-comparable-with*/<T, T>;
Concept
equality_comparable_with
template<class T, class U, class C = common_reference_t<const T&, const U&>> concept /*comparison-common-type-with-impl*/ = // exposition uniquement same_as<common_reference_t<const T&, const U&>, common_reference_t<const U&, const T&>> && requires { requires convertible_to<const T&, const C&> || convertible_to<T, const C&>; requires convertible_to<const U&, const C&> || convertible_to<U, const C&>; }; template<class T, class U> concept /*comparison-common-type-with*/ = // exposition uniquement /*comparison-common-type-with-impl*/<remove_cvref_t<T>, remove_cvref_t<U>>; template<class T, class U> concept equality_comparable_with = equality_comparable<T> && equality_comparable<U> && /*comparison-common-type-with*/<T, U> && equality_comparable< common_reference_t<const remove_reference_t<T>&, const remove_reference_t<U>&>> && /*weakly-equality-comparable-with*/<T, U>;
Concept d'assistant partially-ordered-with
Défini dans l'en-tête <compare>
template<class T, class U> concept /*partiellement-ordonné-avec*/ = // exposition uniquement 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; };
Concept
totally_ordered
template<class T> concept totalement_ordonné = equality_comparable<T> && /*partiellement-ordonné-avec*/<T, T>;
Concept
totally_ordered_with
template<class T, class U> concept totalement_ordonné_avec = totalement_ordonné<T> && totalement_ordonné<U> && comparable_en_égalité_avec<T, U> && totalement_ordonné< type_référence_commune_t<const supprimer_référence_t<T>&, const supprimer_référence_t<U>&>> && /*partiellement-ordonné-avec*/<T, U>;
Concept
movable
template<class T> concept movable = is_object_v<T> && move_constructible<T> && assignable_from<T&, T> && swappable<T>;
Concept
copyable
template<class T> concept copiable = copy_constructible<T> && movable<T> && assignable_from<T&, T&> && assignable_from<T&, const T&> && assignable_from<T&, const T>;
Concept
semiregular
template<class T> concept semiregular = copyable<T> && default_initializable<T>;
Concept
regular
template<class T> concept régulier = semiregular<T> && equality_comparable<T>;
Concept
invocable
template<class F, class... Args> concept invocable = requires(F&& f, Args&&... args) { invoke(std::forward<F>(f), std::forward<Args>(args)...); // non requis d'être préservateur d'égalité };
Concept
regular_invocable
template<class F, class... Args> concept regular_invocable = invocable<F, Args...>;
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte environnant (s'il y en avait) aurait été traduit en français.
Concept
predicate
template<class F, class... Args> concept prédicat = invocable_régulier<F, Args...> && boolean-testable<invoke_result_t<F, Args...>>;
Concept
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>;
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte en dehors des balises de code aurait été traduit, mais dans cet exemple, il n'y a pas de texte à traduire en dehors du code.
Concept
equivalence_relation
template<class R, class T, class U> concept relation_d_equivalence = relation<R, T, U>;
Concept
strict_weak_order
template<class R, class T, class U> concept strict_weak_order = relation<R, T, U>;