Clause | Category | |
[concepts.lib] | Concepts library | |
[utilities] | General utilities library | |
[iterators] | Iterators library | |
[ranges] | Ranges library | |
[algorithms] | Algorithms library | |
[numerics] | Numerics library |
<experimental/ranges/algorithm> | <experimental/ranges/range> |
<experimental/ranges/concepts> | <experimental/ranges/tuple> |
<experimental/ranges/functional> | <experimental/ranges/type_traits> |
<experimental/ranges/iterator> | <experimental/ranges/utility> |
<experimental/ranges/random> |
Subclause | Header(s) | |
[concepts.lib.corelang] | Core language concepts | <experimental/ranges/concepts> |
[concepts.lib.compare] | Comparison concepts | |
[concepts.lib.object] | Object concepts | |
[concepts.lib.callable] | Callable concepts |
Subclause | Header(s) | |
[utility] | Utility components | <experimental/ranges/utility> |
[function.objects] | Function objects | <experimental/ranges/functional> |
[meta] | Type traits | <type_traits> |
[taggedtup] | Tagged tuple-like types | <experimental/ranges/utility> & |
<experimental/ranges/tuple> |
Template | Condition | Precondition |
template <class T, class U> struct is_swappable_with; | The expressions ranges::swap(declval<T>(), declval<U>()) and ranges::swap(declval<U>(), declval<T>()) are each well-formed when treated as an unevaluated operand (Clause ISO/IEC 14882:2014 §[expr]). Access checking is performed as if in a context unrelated to T and U. Only the validity of the immediate context of the swap expressions is considered. [ Note: The compilation of the expressions can result in side effects such as the instantiation of class template specializations and function template specializations, the generation of implicitly-defined functions, and so on. Such side effects are not in the “immediate context” and can result in the program being ill-formed. — end note ] | T and U shall be complete types, (possibly cv-qualified) void, or arrays of unknown bound. |
template <class T> struct is_swappable; | For a referenceable type T, the same result as is_swappable_with_v<T&, T&>, otherwise false. | T shall be a complete type, (possibly cv-qualified) void, or an array of unknown bound. |
template <class T, class U> struct is_nothrow_swappable_with; | is_swappable_with_v<T, U> is true and each swap expression of the definition of is_swappable_with<T, U> is known not to throw any exceptions ( ISO/IEC 14882:2014 §[expr.unary.noexcept]). | T and U shall be complete types, (possibly cv-qualified) void, or arrays of unknown bound. |
template <class T> struct is_nothrow_swappable; | For a referenceable type T, the same result as is_nothrow_swappable_with_v<T&, T&>, otherwise false. | T shall be a complete type, (possibly cv-qualified) void, or an array of unknown bound. |
Template | Comments |
template <class... T> struct common_type; | The member typedef type shall be defined or omitted as specified below. If it is omitted, there shall be no member type. Each type in the parameter pack T shall be complete or (possibly cv) void. A program may specialize this trait if at least one template parameter in the specialization depends on a user-defined type and sizeof...(T) == 2. [ Note: Such specializations are needed when only explicit conversions are desired among the template arguments. — end note ] |
template <class T, class U, template <class> class TQual, template <class> class UQual> struct basic_common_reference; | The primary template shall have no member typedef type. A program may specialize this trait if at least one template parameter in the specialization depends on a user-defined type. In such a specialization, a member typedef type may be defined or omitted. If it is omitted, there shall be no member type. [ Note: Such specializations may be used to influence the result of common_reference. — end note ] |
template <class... T> struct common_reference; | The member typedef type shall be defined or omitted as specified below. If it is omitted, there shall be no member type. Each type in the parameter pack T shall be complete or (possibly cv) void. |
Subclause | Header(s) | |
[iterator.requirements] | Iterator requirements | |
[indirectcallable] | Indirect callable requirements | |
[commonalgoreq] | Common algorithm requirements | |
[iterator.primitives] | Iterator primitives | <experimental/ranges/iterator> |
[iterators.predef] | Predefined iterators | |
[iterators.stream] | Stream iterators |
Random Access | → Bidirectional | → Forward | → Input |
→ Output |
Subclause | Header(s) | |
[range.access] | Range access | <experimental/ranges/range> |
[range.primitives] | Range primitives | |
[ranges.requirements] | Requirements |
Subclause | Header(s) | |
[alg.nonmodifying] | Non-modifying sequence operations | |
[alg.modifying.operations] | Mutating sequence operations | <experimental/ranges/algorithm> |
[alg.sorting] | Sorting and related operations |