Arene Base
Fundamental Utilities For Safety Critical C++
Loading...
Searching...
No Matches
std Namespace Reference

Detailed Description

STL namespace.

Typedef Documentation

◆ add_const_t

template<typename Type>
using std::add_const_t = typename add_const<Type>::type

Add const to the provided type. An alias for the modified type.

Template Parameters
TypeThe type to add const to

◆ add_cv_t

template<typename Type>
using std::add_cv_t = typename add_cv<Type>::type

Add const and volatile to the provided type. An alias for the modified type.

Template Parameters
TypeThe type to add const and volatile to

◆ add_lvalue_reference

Add an lvalue reference onto Type.

Template Parameters
TypeThe type to add an lvalue reference to

add_lvalue_reference works with both referenceable and non-referenceable types. Referenceable types are types in one of three categories:

  1. object types
  2. function types that are not cv-ref qualified.
  3. reference types

For category 3, this should follow reference collapsing rules.

Any type not in one of these three categories is a "non-referenceable" type. For example, void. For non-referenceable types, add_lvalue_reference will return back the input type.

◆ add_lvalue_reference_t

template<typename Type>
using std::add_lvalue_reference_t = typename add_lvalue_reference<Type>::type

Add an lvalue reference onto Type.

Template Parameters
TypeThe type to add an lvalue reference to

◆ add_pointer_t

template<typename Type>
using std::add_pointer_t = typename add_pointer<Type>::type

Adds a pointer to the given type.

If Type is a referenceable type or (possibly cv-qualified) void, the member typedef type provided is typename std::remove_reference<T>::type*. Otherwise, the member typedef type provided is T.

Template Parameters
TThe type to add the pointer to

◆ add_rvalue_reference

Add an rvalue reference onto Type.

Template Parameters
TypeThe type to add an rvalue reference to

add_rvalue_reference works with both referenceable and non-referenceable types. Referenceable types are types in one of three categories:

  1. object types
  2. function types that are not cv-ref qualified.
  3. reference types

For category 3, this should follow reference collapsing rules.

Any type not in one of these three categories is a "non-referenceable" type. For example, void. For non-referenceable types, add_rvalue_reference will return back the input type.

◆ add_rvalue_reference_t

template<typename Type>
using std::add_rvalue_reference_t = typename add_rvalue_reference<Type>::type

Add an rvalue reference onto Type.

Template Parameters
TypeThe type to add an rvalue reference to

◆ add_volatile_t

template<typename Type>
using std::add_volatile_t = typename add_volatile<Type>::type

Add volatile to the provided type. An alias for the modified type.

Template Parameters
TypeThe type to add volatile to

◆ atto

using std::atto = ratio<1, 1'000'000'000'000'000'000>

The SI prefix for 10^(-18), expressed as a ratio.

◆ back_insert_iterator

template<class Container>
using std::back_insert_iterator
Initial value:
basic_insert_iterator_detail::
basic_insert_iterator<Container, back_insert_iterator_detail::adaptor_mixin<Container>>

iterator adaptor for insertion at the end of a container

Template Parameters
Containerassociated container type

std::back_insert_iterator is an OutputIterator that appends elements to a container for which it was constructed. The container's push_back() member function is called whenever the iterator (whether dereferenced or not) is assigned to. Incrementing the std::back_insert_iterator is a no-op.

◆ bool_constant

template<bool Value>
using std::bool_constant = integral_constant<bool, Value>

An alias for integral_constant<bool,Value>

Template Parameters
Valuethe value of the constant

◆ centi

using std::centi = ratio<1, 100>

The SI prefix for 10^(-2), expressed as a ratio.

◆ common_type_t

template<class... Ts>
using std::common_type_t = typename common_type<Ts...>::type

Helper alias template for common_type.

Template Parameters
TsTypes to find common type for

◆ conditional_t

template<bool Condition, typename TrueType, typename FalseType>
using std::conditional_t = typename conditional<Condition, TrueType, FalseType>::type

Helper template alias for selecting types based on a condition. If the supplied Condition is true then it is an alias for TrueType otherwise it is an alias for FalseType.

Template Parameters
ConditionThe condition
TrueTypeThe type to use if the condition is true
FalseTypeThe type to use if the condition is false

◆ deca

using std::deca = ratio<10, 1>

The SI prefix for 10^1, expressed as a ratio.

◆ decay_t

template<typename Type>
using std::decay_t = typename decay<Type>::type

A conversion equivalent to those performed when passing function arguments by value.

Template Parameters
TypeThe type to decay

◆ deci

using std::deci = ratio<1, 10>

The SI prefix for 10^(-1), expressed as a ratio.

◆ enable_if_t

template<bool Condition, typename Type = void>
using std::enable_if_t = typename enable_if<Condition, Type>::type

Type alias to support constraining templates. Is an alias for the specified type if the Condition is true and is not defined if the Condition is false.

Template Parameters
Conditionthe condition to check
Typethe type of the result

◆ exa

using std::exa = ratio<1'000'000'000'000'000'000, 1>

The SI prefix for 10^18, expressed as a ratio.

◆ false_type

An alias for bool_constant<false>

◆ femto

using std::femto = ratio<1, 1'000'000'000'000'000>

The SI prefix for 10^(-15), expressed as a ratio.

◆ giga

using std::giga = ratio<1'000'000'000, 1>

The SI prefix for 10^9, expressed as a ratio.

◆ hecto

using std::hecto = ratio<100, 1>

The SI prefix for 10^2, expressed as a ratio.

◆ index_sequence

template<size_t... Ints>
using std::index_sequence = integer_sequence<size_t, Ints...>

A helper alias template for integer_sequence<size_t, Ints>

Template Parameters
Intsa non-type parameter pack of elements defining the sequence

◆ index_sequence_for

template<typename... Types>
using std::index_sequence_for = make_index_sequence<sizeof...(Types)>

A helper alias template convert any type parameter pack into an index sequence of the same length.

Template Parameters
Typesparameter pack of types

◆ insert_iterator

template<class Container>
using std::insert_iterator
Initial value:

iterator adaptor for insertion into a container

Template Parameters
Containerassociated container type

std::insert_iterator is an OutputIterator that inserts elements into a container for which it was constructed, at the position pointed to by the supplied iterator. The container's insert() member function is called whenever the iterator (whether dereferenced or not) is assigned to. Incrementing the std::insert_iterator is a no-op.

Note
Inserting multiple elements with std::insert_iterator places the earliest elements first.

◆ int16_t

using std::int16_t = ::int16_t

A 16-bit signed integer type.

◆ int32_t

using std::int32_t = ::int32_t

A 32-bit signed integer type.

◆ int64_t

using std::int64_t = ::int64_t

A 64-bit signed integer type.

◆ int8_t

using std::int8_t = ::int8_t

An 8-bit signed integer type.

◆ intmax_t

using std::intmax_t = ::intmax_t

A maximum-width signed integer type.

◆ intptr_t

using std::intptr_t = ::intptr_t

A signed integer type the same size as a pointer.

◆ kilo

using std::kilo = ratio<1'000, 1>

The SI prefix for 10^3, expressed as a ratio.

◆ make_index_sequence

A helper alias template for make_integer_sequence<size_t, Size>

Template Parameters
Sizesize of the sequence

◆ make_integer_sequence

template<typename Type, Type Size>
using std::make_integer_sequence = typename integer_sequence_detail::make_integer_sequence<Type, Size>::type

Helper alias template to simplify creation of std::integer_sequence types with 0, 1, ..., N - 1 as Ints.

Template Parameters
Typean integer type to use for the sequence of elements
Sizesize of the sequence

If N is negative the program is ill-formed. The alias template make_integer_sequence denotes a specialization of integer_sequence with N template non-type arguments. The type make_integer_sequence<T, N> denotes the type integer_sequence<T, 0, 1, ..., N-1>.

◆ make_signed

template<typename Type>
using std::make_signed = make_signed_detail::make_signed<Type>

A type trait to provide the equivalent signed type for integral and enumeration types other than bool.

Template Parameters
TypeThe type to get the equivalent of

◆ make_signed_t

template<typename Type>
using std::make_signed_t = typename make_signed<Type>::type

A type alias for the equivalent signed type for integral and enumeration types other than bool.

Template Parameters
TypeThe type to get the equivalent of

◆ make_unsigned

template<typename Type>
using std::make_unsigned = make_unsigned_detail::make_unsigned<Type>

A type trait to provide the equivalent unsigned type for integral and enumeration types other than bool.

Template Parameters
TypeThe type to get the equivalent of

◆ make_unsigned_t

template<typename Type>
using std::make_unsigned_t = typename make_unsigned<Type>::type

A type alias for the equivalent unsigned type for integral and enumeration types other than bool.

Template Parameters
TypeThe type to get the equivalent of

◆ max_align_t

using std::max_align_t = ::max_align_t

A POD type which has the maximum alignment required for any built-in type.

◆ mega

using std::mega = ratio<1'000'000, 1>

The SI prefix for 10^6, expressed as a ratio.

◆ micro

using std::micro = ratio<1, 1'000'000>

The SI prefix for 10^(-6), expressed as a ratio.

◆ milli

using std::milli = ratio<1, 1'000>

The SI prefix for 10^(-3), expressed as a ratio.

◆ nano

using std::nano = ratio<1, 1'000'000'000>

The SI prefix for 10^(-9), expressed as a ratio.

◆ peta

using std::peta = ratio<1'000'000'000'000'000, 1>

The SI prefix for 10^15, expressed as a ratio.

◆ pico

using std::pico = ratio<1, 1'000'000'000'000>

The SI prefix for 10^(-12), expressed as a ratio.

◆ ptrdiff_t

using std::ptrdiff_t = ::ptrdiff_t

A type suitable for holding the difference between two pointers.

◆ ratio_add

template<class R1, class R2>
using std::ratio_add = typename ratio_detail::ratio_add_impl<R1, R2>::type

Defines the ratio yielded by adding the two given ratios.

Template Parameters
R1The first addend
R2The second addend
Note
Performs reduction before addition so this should always work as long as the result is representable.

◆ ratio_divide

template<class R1, class R2>
using std::ratio_divide = ratio_multiply<R1, ratio<R2::den, R2::num>>

Defines the ratio yielded by dividing the two given ratios.

Template Parameters
R1The dividend
R2The divisor
Note
Performs reduction before division so this should always work as long as the result is representable.

◆ ratio_multiply

template<class R1, class R2>
using std::ratio_multiply = typename ratio_detail::ratio_multiply_impl<R1, R2>::type

Defines the ratio yielded by multiplying the two given ratios.

Template Parameters
R1The first multiplicand
R2The second multiplicand
Note
Performs reduction before multiplication so this should always work as long as the result is representable.

◆ ratio_subtract

template<class R1, class R2>
using std::ratio_subtract = ratio_add<R1, ratio<-R2::num, R2::den>>

Defines the ratio yielded by subtracting the two given ratios.

Template Parameters
R1The minuend
R2The subtrahend
Note
Performs reduction before subtraction so this should always work as long as the result is representable.

◆ remove_all_extents_t

template<typename T>
using std::remove_all_extents_t = typename remove_all_extents<T>::type

Removes all extents from the given array type.

Template Parameters
TThe array type to remove the extents from

Alias to remove_all_extents<T>::type.

◆ remove_const_t

template<typename Type>
using std::remove_const_t = typename remove_const<Type>::type

remove const from the provided type. An alias for the modified type.

Template Parameters
TypeThe type to remove const to

◆ remove_cv_t

template<typename T>
using std::remove_cv_t = typename remove_cv<T>::type

An alias for T, but with top-level const and/or volatile qualifiers removed.

Template Parameters
TThe type to remove the qualifiers from

◆ remove_extent_t

template<typename T>
using std::remove_extent_t = typename remove_extent<T>::type

Removes the first extent from the given array type.

Template Parameters
TThe array type to remove the first extent from

Alias to remove_extent<T>::type.

◆ remove_pointer_t

template<typename T>
using std::remove_pointer_t = typename remove_pointer<T>::type

The type member is an alias for the type pointed to by T, or the same as T if it is not a pointer.

Template Parameters
TThe type to remove the pointer from

◆ remove_reference_t

template<typename T>
using std::remove_reference_t = typename remove_reference<T>::type

An alias for T, but with top-level reference qualifiers removed.

Template Parameters
TThe type to remove the reference qualifiers from

◆ remove_volatile_t

template<typename Type>
using std::remove_volatile_t = typename remove_volatile<Type>::type

remove volatile from the provided type. An alias for the modified type.

Template Parameters
TypeThe type to remove volatile to

◆ size_t

using std::size_t = ::size_t

A type suitable for holding the size of an object.

◆ string

using std::string = basic_string<arene::base::detail::character>

Alias for the common case of a string with char characters, standard traits and standard allocator.

◆ tera

using std::tera = ratio<1'000'000'000'000, 1>

The SI prefix for 10^12, expressed as a ratio.

◆ true_type

An alias for bool_constant<true>

◆ tuple_element_t

template<size_t I, class T>
using std::tuple_element_t = typename tuple_element<I, T>::type

obtains the type of the specified element

Template Parameters
Iindex to obtain the element type of
Ttuple-like type

◆ uint16_t

using std::uint16_t = ::uint16_t

A 16-bit unsigned integer type.

◆ uint32_t

using std::uint32_t = ::uint32_t

A 32-bit unsigned integer type.

◆ uint64_t

using std::uint64_t = ::uint64_t

A 64-bit unsigned integer type.

◆ uint8_t

using std::uint8_t = ::uint8_t

An 8-bit unsigned integer type.

◆ uintmax_t

using std::uintmax_t = ::uintmax_t

A maximum-width unsigned integer type.

◆ uintptr_t

using std::uintptr_t = ::uintptr_t

An unsigned integer type the same size as a pointer.

◆ underlying_type

Obtains the underlying integer type for a given enumeration type.

Template Parameters
TEnumeration type

Provides member type alias type that names the underlying type of T if T is an enumeration type. If T is not an enumeration type, there is no member type.

◆ underlying_type_t

template<typename T>
using std::underlying_type_t = typename underlying_type<T>::type

An alias for the underlying type of T, if T is an enumeration type.

Template Parameters
TThe type to get the underlying type of

◆ void_t

template<class... Args>
using std::void_t = arene::base::void_t<Args...>

An alias for void that accepts any number of type parameters, used for substitution checks template.

Template Parameters
ArgsAny number of template parameters

Enumeration Type Documentation

◆ float_denorm_style

Enumeration describing possible denormalized value representation properties.

Enumerator
denorm_indeterminate 

It cannot be determined if this type has denormalized values.

denorm_absent 

This type has no denormalized values.

denorm_present 

This type has denormalized values.

◆ float_round_style

Enumeration describing possible rounding styles.

Enumerator
round_indeterminate 

Rounding is indeterminable.

round_toward_zero 

Round towards zero.

round_to_nearest 

Round towards nearest.

round_toward_infinity 

Round towards positive infinity.

round_toward_neg_infinity 

Round towards negative infinity.

Function Documentation

◆ accumulate() [1/2]

template<typename InputIterator, typename T, arene::base::constraints< enable_if_t< internal::has_basic_input_iterator_operations_v< InputIterator > > > = nullptr>
auto std::accumulate ( InputIterator first,
InputIterator last,
T init ) -> T
noexcept

Perform a left-fold on the input range [first,last) starting with the value init . For each element e in the range, does init=init+e.

Template Parameters
InputIteratorThe iterator type of the range
TThe type of the initial value and return value
Parameters
firstThe start of the range
lastThe end of the range
initThe initial value
Returns
init as modified by the operations
Precondition
InputIterator must be a valid input iterator
[first,last) must be a valid range
init=init+*first must be defined.
Exceptions
Anyexception thrown from iterator operations, or init=init+e

◆ accumulate() [2/2]

template<typename InputIterator, typename T, typename BinaryOperation, arene::base::constraints< enable_if_t< internal::has_basic_input_iterator_operations_v< InputIterator > >, enable_if_t< is_assignable_v< T &, > > > = nullptr>
auto std::accumulate ( InputIterator first,
InputIterator last,
T init,
BinaryOperation binary_op ) -> T
noexcept

Perform a left-fold on the input range [first,last) starting with the value init using the specified binary_op . For each element e in the range, does init=binary_op(init,e)

Template Parameters
InputIteratorThe iterator type of the range
TThe type of the initial value and return value
BinaryOperationThe type of the binary operation
Parameters
firstThe start of the range
lastThe end of the range
initThe initial value
binary_opThe operator to use to accumulate the values
Returns
init as modified by the operations
Precondition
InputIterator must be a valid input iterator
[first,last) must be a valid range
init=binary_op(init,*first) must be defined.
Exceptions
Anyexception thrown from iterator operations, or init=binary_op(init,*first)

◆ addressof() [1/2]

template<class T>
auto std::addressof ( T & value) -> T*
constexprnoexcept

Obtains the actual address of the object or function arg, even in presence of overloaded operator&.

Template Parameters
TThe type of the value
Parameters
valueThe value to take the address of
Returns
The address of the supplied value

◆ addressof() [2/2]

template<class T>
auto std::addressof ( T const && ) -> T const *=delete
constexprdeletenoexcept

Obtains the actual address of the object or function arg, even in presence of overloaded operator&.

Template Parameters
TThe type of the value
Returns
The address of the supplied value

◆ adjacent_find() [1/2]

template<class ForwardIterator, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_predicate_v< arene::base::algorithm_detail::operator_equal_t &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator >, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::adjacent_find ( ForwardIterator first,
ForwardIterator last ) -> ForwardIterator
noexcept

finds the first two adjacent items that are equal

Template Parameters
ForwardIteratoriterator type
Parameters
firstthe beginning of the range
lastthe end of the range
Precondition
ForwardIteratorerator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression e1 == e2 must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.
Returns
iterator to the first element of the range [first, last) such that *it == *(it + 1) or last if no such element is found.
Note
Complexity For a nonempty range, exactly min((i - first) + 1, (last - first) - 1) equality comparisons, where i is adjacent_find's return value.

◆ adjacent_find() [2/2]

template<class ForwardIterator, class BinaryPred, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_predicate_v< BinaryPred &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator >, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::adjacent_find ( ForwardIterator first,
ForwardIterator last,
BinaryPred pred ) -> ForwardIterator
noexcept

finds the first two adjacent items that satisfy a given predicate

Template Parameters
ForwardIteratoriterator type
BinaryPredbinary predicate type
Parameters
firstthe beginning of the range
lastthe end of the range
predbinary predicate which returns true if the elements should be treated as equal
Precondition
ForwardIteratorerator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression pred(e1, e2) must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.
Returns
iterator to the first element of the range [first, last) such that pred(*it, *(it + 1)) != false or last if no such element is found.
Note
Complexity For a nonempty range, exactly min((i - first) + 1, (last - first) - 1) applications of the corresponding predicate, where i is adjacent_find's return value.

◆ back_inserter()

template<class Container>
auto std::back_inserter ( Container & container) -> back_insert_iterator<Container>
constexprnoexcept

creates a std::back_insert_iterator of type inferred from the argument

Template Parameters
Containercontainer type to insert into
Parameters
containercontainer to insert into

std::back_inserter is a convenience function template that constructs a std::back_insert_iterator for the container container with the type deduced from the type of the argument.

Returns
a std::back_insert_iterator which can be used to add elements to the end of the container container.

◆ begin() [1/3]

template<typename Container>
auto std::begin ( Container & cont) ->
constexprnoexcept

Obtain the result of calling cont.begin() on a container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.begin()

◆ begin() [2/3]

template<typename Container>
auto std::begin ( Container const & cont) ->
constexprnoexcept

Obtain the result of calling cont.begin() on a const container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.begin()

◆ begin() [3/3]

template<typename Element, size_t Size>
auto std::begin ( Element(&) array[Size]) -> Element*
constexprnoexcept

Obtain a pointer to the first element of the array.

Template Parameters
ElementThe element type of the array
SizeThe size of the array
Parameters
arrayThe array
Returns
A pointer to the first element of array

◆ cbegin()

template<typename Container>
auto std::cbegin ( Container const & cont) ->
constexprnoexcept

Equivalent to invoking begin(cont) on a const container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.begin()

◆ cend()

template<typename Container>
auto std::cend ( Container const & cont) ->
constexprnoexcept

Equivalent to invoking end(cont) on a const container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.end()

◆ copy_n()

template<typename InputIterator, typename Size, typename OutputIterator, arene::base::constraints< enable_if_t< internal::has_basic_input_iterator_operations_v< InputIterator > >, enable_if_t< copy_n_detail::is_convertible_to_integral_v< Size > >, enable_if_t< internal::has_basic_output_iterator_operations_v< OutputIterator > >, enable_if_t< internal::is_indirectly_copy_assignable_v< InputIterator, OutputIterator > > > = nullptr>
auto std::copy_n ( InputIterator first,
Size count,
OutputIterator out ) -> OutputIterator
noexcept

Copy count elements from the input range starting with first to the output range starting with out.

Template Parameters
InputIteratorThe type of the input iterator
SizeThe type of the count of elements to copy
OutputIteratorThe type of the output iterator
Parameters
firstThe start of the source range
countThe number of elements to copy
outThe start of the output range
Returns
The final value of out
Precondition
InputIterator must be an input iterator
first must be the start of a valid input range of at least count elements
Size must be convertible to an integral type
OutputIterator must be an output iterator
out must be the start of a valid output range of at least count elements

◆ count_if()

template<class InputIterator, class UnaryPredicate, arene::base::constraints< enable_if_t< arene::base::is_input_iterator_v< InputIterator > >, enable_if_t< arene::base::is_predicate_v< UnaryPredicate &, arene::base::algorithm_detail::iter_reference_t< InputIterator > > > > = nullptr>
auto std::count_if ( InputIterator begin,
InputIterator end,
UnaryPredicate predicate ) -> typename std::iterator_traits<InputIterator>::difference_type
constexpr

Count the number of elements in a range satisfying a predicate.

Template Parameters
InputIteratorThe type of the iterators denoting the input range.
UnaryPredicateThe type of the unary callable that returns a boolean testable value
Parameters
beginThe start of the range
endThe end of the range
predicateThe unary predicate which returns true for the counted elements
Returns
The count of elements in the range for which predicate returns true
Precondition
InputIterator must satisfy the input iterator requirements.
[begin,end) must be a valid range.
The expression predicate(v) must be convertible to bool for every argument v of type (possibly const) VT, where VT is the value type of InputIterator, regardless of value category, and must not modify v.

◆ cref() [1/3]

template<typename T>
auto std::cref ( reference_wrapper< T > other) -> reference_wrapper<T const>
noexcept

Create a const type-deduced copy of a reference_wrapper.

Template Parameters
TType wrapped by the input wrapper
Parameters
otherreference_wrapper to copy
Returns
A copy of the input reference_wrapper

◆ cref() [2/3]

template<typename T>
auto std::cref ( T && )
delete

Cannot create a reference_wrapper from an rvalue reference.

Template Parameters
Ttype of the reference

◆ cref() [3/3]

template<typename T>
auto std::cref ( T & to_wrap) -> reference_wrapper<T const>
noexcept

Create a const type-deduced reference_wrapper.

Template Parameters
Ttype of the reference
Parameters
to_wrapObject or function to wrap
Returns
A reference_wrapper around the input of const-qualified type

◆ declval()

template<typename T>
auto std::declval ( ) -> T &&
noexcept

A dummy function that is declared but not defined, with a user-specified return type, for use in unevaluated expressions.

Template Parameters
TThe return type
Returns
An imaginary instance of the specified type if the type is a reference type, or as an rvalue of the specified type otherwise.

◆ end() [1/3]

template<typename Container>
auto std::end ( Container & cont) ->
constexprnoexcept

Obtain the result of calling cont.end() on a container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.end()

◆ end() [2/3]

template<typename Container>
auto std::end ( Container const & cont) ->
constexprnoexcept

Obtain the result of calling cont.end() on a const container.

Template Parameters
ContainerThe type of the container
Parameters
contThe container object
Returns
The result of cont.end()

◆ end() [3/3]

template<typename Element, size_t Size>
auto std::end ( Element(&) array[Size]) -> Element*
constexprnoexcept

Obtain a pointer to the one-past-the-end element of the array.

Template Parameters
ElementThe element type of the array
SizeThe size of the array
Parameters
arrayThe array
Returns
A pointer to the one-past-the-end element of array

◆ exchange()

template<typename T, typename U = T>
auto std::exchange ( T & target,
U && source ) -> T
constexprnoexcept

Assign a new value to an object and return the old value. Implements std::exchange.

Template Parameters
TThe type of the object to update
UThe type of the source
Parameters
targetThe object to update
sourceThe source
Returns
The old value
Precondition
T must be move-constructible
is_assignable_v<T&,U&&> must be true

◆ find_if_not()

template<typename InputIterator, typename Predicate, arene::base::constraints< enable_if_t< arene::base::is_input_iterator_v< InputIterator > >, enable_if_t< arene::base::is_predicate_v< Predicate &, arene::base::algorithm_detail::iter_reference_t< InputIterator > > > > = nullptr>
auto std::find_if_not ( InputIterator first,
InputIterator last,
Predicate pred ) -> InputIterator
noexcept

Find the first position in a range where the predicate is false. Returns the end of the range if there is no such position.

Template Parameters
InputIteratorThe type of the iterator used to mark the range
PredicateThe type of the predicate
Parameters
firstThe start of the range
lastThe end of the range
predThe predicate
Returns
The first iterator in [first,last) for which pred(*it) is false, or last if no such iterator exists
Precondition
InputIterator must be an input iterator
[first,last) must denote a valid range
pred(*first) must be well-formed and return a boolean-testable value

◆ forward() [1/2]

template<typename T>
auto std::forward ( remove_reference_t< T > && value) -> T&&
constexprnoexcept

Cast a value to an rvalue if T is an rvalue or rvalue reference, otherwise forward an lvalue reference.

Template Parameters
TThe type of the value
Parameters
valueThe value to cast
Returns
The input reference cast to an rvalue

◆ forward() [2/2]

template<typename T>
auto std::forward ( remove_reference_t< T > & value) -> T&&
constexprnoexcept

Cast a value to an rvalue if T is an rvalue or rvalue reference, otherwise forward an lvalue reference.

Template Parameters
TThe type of the value
Parameters
valueThe value to cast
Returns
The input reference cast to an rvalue

◆ forward_as_tuple()

template<class... ArgTs>
auto std::forward_as_tuple ( ArgTs &&... args) -> tuple<ArgTs&&...>
constexprnoexcept

construct a tuple of references to the provided arguments suitable for forwarding as arguments to a function call.

Template Parameters
ArgTstypes of the tuple members, deduced from args
Parameters
argsa pack of values used to initialize the tuple
Returns
std::tuple<Args&&...> A tuple constructed as if via std::tuple<Args&&...>(std::forward<Args>(args)...)
Note
The tuple does not extend the lifetime of any temporaries passed to it. It is the caller's responsibility to ensure that any references in the returned tuple remain valid for the lifetime of the tuple.

◆ get() [1/12]

template<class T1, class T2>
auto std::get ( pair< T1, T2 > && values) -> T1&&
constexprnoexcept

access an element of a pair

Template Parameters
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true
Template Parameters
T1second pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true

◆ get() [2/12]

template<size_t I, class T1, class T2>
auto std::get ( pair< T1, T2 > && values) -> tuple_element_t<I, pair<T1, T2>>&&
constexprnoexcept

access an element of a pair

Template Parameters
Iindex of the element to access
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if I >= 2

◆ get() [3/12]

template<class T1, class T2>
auto std::get ( pair< T1, T2 > & values) -> T1&
constexprnoexcept

access an element of a pair

Template Parameters
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true
Template Parameters
T1second pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true

◆ get() [4/12]

template<size_t I, class T1, class T2>
auto std::get ( pair< T1, T2 > & values) -> tuple_element_t<I, pair<T1, T2>>&
constexprnoexcept

access an element of a pair

Template Parameters
Iindex of the element to access
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if I >= 2

◆ get() [5/12]

template<class T1, class T2>
auto std::get ( pair< T1, T2 > const && values) -> T1 const&&
constexprnoexcept

access an element of a pair

Template Parameters
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true
Template Parameters
T1second pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true

◆ get() [6/12]

template<size_t I, class T1, class T2>
auto std::get ( pair< T1, T2 > const && values) -> tuple_element_t<I, pair<T1, T2>> const&&
constexprnoexcept

access an element of a pair

Template Parameters
Iindex of the element to access
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if I >= 2

◆ get() [7/12]

template<class T1, class T2>
auto std::get ( pair< T1, T2 > const & values) -> T1 const&
constexprnoexcept

access an element of a pair

Template Parameters
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true
Template Parameters
T1second pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if std::is_same<T1, T2>::value is true

◆ get() [8/12]

template<size_t I, class T1, class T2>
auto std::get ( pair< T1, T2 > const & values) -> tuple_element_t<I, pair<T1, T2>> const&
constexprnoexcept

access an element of a pair

Template Parameters
Iindex of the element to access
T1first pair type
T2second pair type
Parameters
valuesreference to a pair
Returns
reference to a value in values
Note
ill-formed if I >= 2

◆ get() [9/12]

template<size_t I, class... Types>
auto std::get ( tuple< Types... > && tup) -> tuple_element_t< I, tuple< Types... > > &&
constexprnoexcept

access an element of a mutable rvalue reference to a tuple

access an element of an rvalue reference to a tuple

Template Parameters
Iindex of the element to access
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the I'th element of tup
Template Parameters
Ttype of the element to access; must occur exactly once within tuple
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the only occurrence of T within tup

◆ get() [10/12]

template<size_t I, class... Types>
auto std::get ( tuple< Types... > & tup) -> tuple_element_t< I, tuple< Types... > > &
constexprnoexcept

access an element of a mutable lvalue reference to a tuple

access an element of an lvalue reference to a tuple

Template Parameters
Iindex of the element to access
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the I'th element of tup
Template Parameters
Ttype of the element to access; must occur exactly once within tuple
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the only occurrence of T within tup

◆ get() [11/12]

template<size_t I, class... Types>
auto std::get ( tuple< Types... > const && tup) -> tuple_element_t< I, tuple< Types... > > const &&
constexprnoexcept

access an element of a const rvalue reference to a tuple

Template Parameters
Iindex of the element to access
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the I'th element of tup
Template Parameters
Ttype of the element to access; must occur exactly once within tuple
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the only occurrence of T within tup

◆ get() [12/12]

template<size_t I, class... Types>
auto std::get ( tuple< Types... > const & tup) -> tuple_element_t< I, tuple< Types... > > const &
constexprnoexcept

access an element of a const lvalue reference to a tuple

Template Parameters
Iindex of the element to access
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the I'th element of tup
Template Parameters
Ttype of the element to access; must occur exactly once within tuple
Typestypes of the tuple
Parameters
tuptuple to access an element from
Returns
reference to the only occurrence of T within tup

◆ inner_product() [1/2]

template<class InputIt1, class InputIt2, class Value, arene::base::constraints< std::enable_if_t< arene::base::is_input_iterator_v< InputIt1 > >, std::enable_if_t< arene::base::is_input_iterator_v< InputIt2 > >, std::enable_if_t< arene::base::is_copyable_v< Value > >, std::enable_if_t< std::is_assignable< Value &, arene::base::invoke_result_t< plus<> &, Value &, arene::base::invoke_result_t< multiplies<> &, arene::base::algorithm_detail::iter_reference_t< InputIt1 >, arene::base::algorithm_detail::iter_reference_t< InputIt2 > > > >::value > > = nullptr>
auto std::inner_product ( InputIt1 first1,
InputIt1 last1,
InputIt2 first2,
Value init ) -> Value
noexcept

computes the inner product of two ranges of elements

Template Parameters
InputIt1type of the iterator for the first range
InputIt2type of the iterator for the second range
Valuetype of the accumulated value
Parameters
first1iterator to the beginning of the first range
last1iterator to one past the end of the first range
first2iterator to the beginning of the second range
initinitial value to start with
Returns
Initializes the accumulator acc (of type Value) with the initial value init and then modifies it with the expression acc = plus(acc, multiplies(*i1, *i2)) for every iterator i1 in the range [first1, last1) in order and its corresponding iterator i2 in the range beginning at first2.
Precondition
[first2, first2 + distance(first1, last1)) is a valid range
binary operator+ does not invalidate subranges, nor modify elements in the ranges [first1, last1) and [first2, first2 + distance(first1, last1))
binary operator* does not invalidate subranges, nor modify elements in the ranges [first1, last1) and [first2, first2 + distance(first1, last1))
Note
Constraints
  • InputIt1 must satisfy the input iterator requirements
  • InputIt2 must satisfy the input iterator requirements
  • Value is copy constructible
  • Value is copy assignable
  • *first1 * *first2 is a valid expression
  • init + multiplies(*first1, *first2) is assignable to Value
Complexity
O(N) applications of plus and multiplies, where N = distance(first1, last1) .
inner_product always performs the operations in the order given.

◆ inner_product() [2/2]

template<class InputIt1, class InputIt2, class Value, class Plus, class Multiplies, arene::base::constraints< std::enable_if_t< arene::base::is_input_iterator_v< InputIt1 > >, std::enable_if_t< arene::base::is_input_iterator_v< InputIt2 > >, std::enable_if_t< arene::base::is_copyable_v< Value > >, std::enable_if_t< std::is_assignable< Value &, arene::base::invoke_result_t< Plus &, Value &, arene::base::invoke_result_t< Multiplies &, arene::base::algorithm_detail::iter_reference_t< InputIt1 >, arene::base::algorithm_detail::iter_reference_t< InputIt2 > > > >::value > > = nullptr>
auto std::inner_product ( InputIt1 first1,
InputIt1 last1,
InputIt2 first2,
Value init,
Plus plus,
Multiplies multiplies ) -> Value
noexcept

computes the inner product of two ranges of elements

Template Parameters
InputIt1type of the iterator for the first range
InputIt2type of the iterator for the second range
Valuetype of the accumulated value
Plustype of the addition operation
Multipliestype of the multiplication operation
Parameters
first1iterator to the beginning of the first range
last1iterator to one past the end of the first range
first2iterator to the beginning of the second range
initinitial value to start with
plusbinary function object used to reduce transformed elements to a single value
multipliesbinary function object applied to each pair of elements of the input ranges
Returns
Initializes the accumulator acc (of type Value) with the initial value init and then modifies it with the expression acc = plus(acc, multiplies(*i1, *i2)) for every iterator i1 in the range [first1, last1) in order and its corresponding iterator i2 in the range beginning at first2.
Precondition
[first2, first2 + distance(first1, last1)) is a valid range
plus does not invalidate subranges, nor modify elements in the ranges [first1, last1) and [first2, first2 + distance(first1, last1))
multiplies does not invalidate subranges, nor modify elements in the ranges [first1, last1) and [first2, first2 + distance(first1, last1))
Note
Constraints
  • InputIt1 must satisfy the input iterator requirements
  • InputIt2 must satisfy the input iterator requirements
  • Value is copy constructible
  • Value is copy assignable
  • multiplies(*first1, *first2) is a valid expression
  • plus(init, multiplies(*first1, *first2)) is assignable to Value
Complexity
O(N) applications of plus and multiplies, where N = distance(first1, last1) .
inner_product always performs the operations in the order given.

◆ inserter()

template<class Container>
auto std::inserter ( Container & container,
typename Container::iterator iter ) -> insert_iterator<Container>
constexprnoexcept

creates an std::insert_iterator of type inferred from the argument

Template Parameters
Containercontainer type to insert into
Parameters
containercontainer to insert into
iteriterator in container specifying the insertion position

std::inserter is a convenience function template that constructs an std::insert_iterator for the container container and its iterator iter with the type deduced from the type of the container argument.

Returns
a std::insert_iterator which can be used to insert elements into the container container at the position specified by iter.

◆ iota()

template<class ForwardIt, class Value, arene::base::constraints< enable_if_t< arene::base::is_forward_iterator_v< ForwardIt > >, enable_if_t< is_convertible_v< Value, arene::base::algorithm_detail::iter_value_t< ForwardIt > > >, > = nullptr>
auto std::iota ( ForwardIt first,
ForwardIt last,
Value value ) -> void
noexcept

fills a range with successive increments of the starting value

Template Parameters
ForwardItthe type of the ForwardIt
Valuethe type of the value
Parameters
firstForwardIt to the beginning of the range
lastForwardIt to one past the end of the range
valueinitial value to fill with

Fills the range [first, last) with sequentially increasing values, starting with value and repetitively evaluating ++value .

Precondition
ForwardIt must satisfy the forward iterator requirements
T is convertible to the value type of ForwardIt
the expression ++value is well-formed
Note
Complexity
Exactly distance(first, last) increments and assignments.

◆ is_sorted() [1/2]

template<typename ForwardIterator, arene::base::constraints< enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, enable_if_t< arene::base::is_compare_v< &, typename std::iterator_traits< ForwardIterator >::reference > > > = nullptr>
auto std::is_sorted ( ForwardIterator first,
ForwardIterator last ) -> bool
noexcept

Check if a range is sorted. Returns false if there are any pair of sequential elements i and j such that j<i is true otherwise returns true.

Template Parameters
ForwardIteratorThe iterator type used to identify the range
Parameters
firstThe start of the range
lastThe end of the range
Returns
true if the range is sorted, false otherwise
Precondition
[first,last) must be a valid range
*first<*first must be valid and return a boolean-testable result
Less-than comparison of elements must provide a strict weak order over the elements of the range

◆ is_sorted() [2/2]

template<typename ForwardIterator, typename Comparator, arene::base::constraints< enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, enable_if_t< arene::base::is_compare_v< Comparator &, typename std::iterator_traits< ForwardIterator >::reference > > > = nullptr>
auto std::is_sorted ( ForwardIterator first,
ForwardIterator last,
Comparator comp ) -> bool
noexcept

Check if a range is sorted. Returns false if there are any pair of sequential elements i and j such that comp(j,i) is true otherwise returns true.

Template Parameters
ForwardIteratorThe iterator type used to identify the range
ComparatorThe type of the comparator
Parameters
firstThe start of the range
lastThe end of the range
compThe comparator
Returns
true if the range is sorted, false otherwise
Precondition
[first,last) must be a valid range
comp(*first,*first) must be valid and return a boolean-testable result
comp must provide a strict weak order over the elements of the range

◆ iter_swap()

template<class ForwardIterator1, class ForwardIterator2, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator1 > >, std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator2 > >, std::enable_if_t< arene::base::is_swappable_with_v< typename std::iterator_traits< ForwardIterator1 >::reference, typename std::iterator_traits< ForwardIterator2 >::reference > > > = nullptr>
auto std::iter_swap ( ForwardIterator1 lhs,
ForwardIterator2 rhs ) -> void
constexprnoexcept

swaps the objects pointed to by two iterators

Template Parameters
ForwardIterator1type of the first iterator
ForwardIterator2type of the second iterator
Parameters
lhsfirst iterator to object to swap
rhssecond iterator to object to swap

◆ lower_bound() [1/2]

template<class ForwardIterator, class T, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_binary_predicate_v< &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator >, T const & > > > = nullptr>
auto std::lower_bound ( ForwardIterator first,
ForwardIterator last,
T const & value ) -> ForwardIterator
constexprnoexcept

returns an iterator to the first element not less than the given value

Template Parameters
ForwardIteratoriterator type
Tvalue type to compare against
Comparebinary predicate type
Parameters
firstbeginning of the partitioned range of elements
lastend of the partitioned range of elements
valuevalue to compare elements to
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression e < value must be convertible to bool for every argument e of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e or value.
The elements e of [begin, end) must be partitioned with respect to the expression e < value.
Returns
iterator to the first element of the range [first, last) not ordered before value, or last if no such element is found.
Note
Complexity Given N as std::distance(first, last), at most log2(N) + O(1) comparisons with value using operator<.

◆ lower_bound() [2/2]

template<class ForwardIterator, class T, class Compare, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_binary_predicate_v< Compare &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator >, T const & > > > = nullptr>
auto std::lower_bound ( ForwardIterator first,
ForwardIterator last,
T const & value,
Compare comp ) -> ForwardIterator
constexprnoexcept

returns an iterator to the first element not less than the given value

Template Parameters
ForwardIteratoriterator type
Tvalue type to compare against
Comparebinary predicate type
Parameters
firstbeginning of the partitioned range of elements
lastend of the partitioned range of elements
valuevalue to compare elements to
compbinary predicate which returns true if the first argument is ordered before the second
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression comp(e, value) must be convertible to bool for every argument e of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e or value.
The elements e of [begin, end) must be partitioned with respect to the expression comp(e, value).
Returns
iterator to the first element of the range [first, last) not ordered before value, or last if no such element is found.
Note
Complexity Given N as std::distance(first, last), at most log2(N) + O(1) applications of the comparator comp.

◆ make_move_iterator()

template<typename Iterator>
auto std::make_move_iterator ( Iterator iter) -> std::move_iterator<Iterator>

Create a move_iterator with the specified underlying iterator.

Template Parameters
IteratorThe type of the underlying iterator
Parameters
iterThe value to use for the underlying iterator
Returns
The new move_iterator

◆ make_pair()

template<class T1, class T2>
auto std::make_pair ( T1 && first,
T2 && second ) -> pair_detail::deduced_pair_type_t<T1, T2>
constexprnoexcept

Creates a std::pair object, deducing the target type from the types of arguments.

Template Parameters
T1The first argument type
T2The second argument type
Parameters
firstThe first argument
secondThe second argument

Given types std::decay<T1>::type as U1 and std::decay<T2>::type as U2, the types V1 and V2 are defined as follows:

If U1 is std::reference_wrapper<X>, V1 is X&; otherwise V1 is U1. If U2 is std::reference_wrapper<Y>, V2 is Y&; otherwise V2 is U2.

Returns
std::pair<V1, V2>(std::forward<T1>(x), std::forward<T2>(y))

◆ make_tuple()

template<class... Types>
auto std::make_tuple ( Types &&... args) -> tuple<arene::base::unwrap_ref_decay_t<Types>...>
constexprnoexcept

construct a tuple with types deduced from the provided arguments

Template Parameters
Typestypes of the tuple members, deduced from args
Parameters
argsa pack of values used to initialize the tuple
Returns
A tuple with contents initialized using args
Note
Tuple member types are deduced as value types, not references, unless passed in as reference_wrapper instances

◆ max() [1/4]

auto std::max ( initializer_list< T > list) -> T
constexprnoexcept

Returns the largest value in the std::initializer_list.

Template Parameters
TThe type of the values in the std::initializer_list
Parameters
listThe list of values to compare
Returns
Returns the largest value in list
Precondition
list.size() > 0
std::is_copy_constructible<T>::value == true
The expression comp(a, b) must be convertible to bool for every argument a, b of type T const& .

◆ max() [2/4]

template<class T, class Compare, arene::base::constraints< std::enable_if_t< std::is_copy_constructible_v< T > >, std::enable_if_t< arene::base::is_compare_v< Compare &, T const & > > > = nullptr>
auto std::max ( initializer_list< T > list,
Compare comp ) -> T
constexprnoexcept

Returns the largest value in the std::initializer_list.

Template Parameters
TThe type of the values in the std::initializer_list
CompareThe type of the comparison function
Parameters
listThe list of values to compare
compThe comparison function which returns true if the first parameter is less than the second
Returns
Returns the largest value in list using the comparison function comp to compare the values
Precondition
list.size() > 0
std::is_copy_constructible<T>::value == true
The expression comp(a, b) must be convertible to bool for every argument a, b of type T const& .

◆ max() [3/4]

template<class T>
auto std::max ( T const & lhs,
T const & rhs ) -> T const&
constexprnoexcept

Returns the larger of the given values.

Template Parameters
TThe type of the values
Parameters
lhsThe first value to compare
rhsThe second value to compare
Returns
Returns the larger of lhs and rhs
Note
If T is not LessThanComparable, the behavior is undefined

◆ max() [4/4]

template<class T, class Compare>
auto std::max ( T const & lhs,
T const & rhs,
Compare comp ) -> T const&
constexprnoexcept

Returns the larger of the given values.

Template Parameters
TThe type of the values
CompareThe type of the comparison function
Parameters
lhsThe first value to compare
rhsThe second value to compare
compThe comparison function which returns true if the first parameter is less than the second
Returns
Returns the larger of lhs and rhs using the comparison function comp to compare the values

◆ max_element() [1/2]

template<class ForwardIterator, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_compare_v< &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::max_element ( ForwardIterator first,
ForwardIterator last ) -> ForwardIterator
constexprnoexcept

returns the largest element in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression e1 < e2 must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds the largest element, i.e. the element ordered after all other elements, in the range [first, last).

Returns
iterator to the largest element of the range [first, last). If several elements in the range are equivalent to the largest element, returns the iterator to the first such element. Returns last if the range is empty.
Note
Complexity Given N as std::distance(first, last), exactly max(N - 1, 0) comparisons using operator<.

◆ max_element() [2/2]

template<class ForwardIterator, class Compare, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_compare_v< Compare &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::max_element ( ForwardIterator first,
ForwardIterator last,
Compare comp ) -> ForwardIterator
constexprnoexcept

returns the largest element in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
compbinary predicate which returns true if the first argument is ordered before the second
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression comp(e1, e2) must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds the largest element, i.e. the element ordered after all other elements, in the range [first, last).

Returns
iterator to the largest element of the range [first, last). If several elements in the range are equivalent to the largest element, returns the iterator to the first such element. Returns last if the range is empty.
Note
Complexity Given N as std::distance(first, last), exactly max(N - 1, 0) applications of the comparator comp.

◆ memcpy()

auto std::memcpy ( void * dest,
void const * src,
std::size_t count ) -> void*
inline

copies one buffer to another

Parameters
destdestination buffer
srcsource buffer
countnumber of bytes to copy
Returns
pointer to the destination buffer

◆ min() [1/4]

auto std::min ( initializer_list< T > list) -> T
constexprnoexcept

Returns the smallest value in the std::initializer_list.

Template Parameters
TThe type of the values in the std::initializer_list
Parameters
listThe list of values to compare
Returns
Returns the smallest value in list
Precondition
list.size() > 0
std::is_copy_constructible<T>::value == true
The expression comp(a, b) must be convertible to bool for every argument a, b of type T const& .

◆ min() [2/4]

template<class T, class Compare, arene::base::constraints< std::enable_if_t< std::is_copy_constructible_v< T > >, std::enable_if_t< arene::base::is_compare_v< Compare &, T & > > > = nullptr>
auto std::min ( initializer_list< T > list,
Compare comp ) -> T
constexprnoexcept

Returns the smallest value in the std::initializer_list.

Template Parameters
TThe type of the values in the std::initializer_list
CompareThe type of the comparison function
Parameters
listThe list of values to compare
compThe comparison function which returns true if the first parameter is less than the second
Returns
Returns the smallest value in list using the comparison function comp to compare the values
Precondition
list.size() > 0
std::is_copy_constructible<T>::value == true
The expression comp(a, b) must be convertible to bool for every argument a, b of type T const& .

◆ min() [3/4]

template<class T>
auto std::min ( T const & lhs,
T const & rhs ) -> T const&
constexprnoexcept

Returns the smaller of the given values.

Template Parameters
TThe type of the values
Parameters
lhsThe first value to compare
rhsThe second value to compare
Returns
Returns the smaller of lhs and rhs
Note
If T is not LessThanComparable, the behavior is undefined

◆ min() [4/4]

template<class T, class Compare>
auto std::min ( T const & lhs,
T const & rhs,
Compare comp ) -> T const&
constexprnoexcept

Returns the smaller of the given values.

Template Parameters
TThe type of the values
CompareThe type of the comparison function
Parameters
lhsThe first value to compare
rhsThe second value to compare
compThe comparison function which returns true if the first parameter is less than the second
Returns
Returns the smaller of lhs and rhs using the comparison function comp to compare the values

◆ min_element() [1/2]

template<class ForwardIterator, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_predicate_v< &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator >, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::min_element ( ForwardIterator first,
ForwardIterator last ) -> ForwardIterator
constexprnoexcept

returns the smallest element in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression e1 < e2 must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds the smallest element, i.e. the element ordered before all other elements, in the range [first, last).

Returns
iterator to the smallest element of the range [first, last). If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. Returns last if the range is empty.
Note
Complexity Given N as std::distance(first, last), exactly max(N - 1, 0) comparisons using operator<.

◆ min_element() [2/2]

template<class ForwardIterator, class Compare, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_compare_v< Compare &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::min_element ( ForwardIterator first,
ForwardIterator last,
Compare comp ) -> ForwardIterator
constexprnoexcept

returns the smallest element in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
compbinary predicate which returns true if the first argument is ordered before the second
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression comp(e1, e2) must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds the smallest element, i.e. the element ordered before all other elements, in the range [first, last).

Returns
iterator to the smallest element of the range [first, last). If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. Returns last if the range is empty.
Note
Complexity Given N as std::distance(first, last), exactly max(N - 1, 0) applications of the comparator comp.

◆ minmax_element() [1/2]

template<class ForwardIterator, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_compare_v< &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::minmax_element ( ForwardIterator first,
ForwardIterator last ) -> std::pair<ForwardIterator, ForwardIterator>
constexprnoexcept

returns the smallest and largest elements in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression e1 < e2 must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds both the first smallest element, i.e. the element ordered before all other elements, and the last largest element, i.e. the element ordered after all other elements, in the range [first, last).

Returns
pair of iterators to the smallest element of the range [first, last). If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. If several elements in the range are equivalent to the largest element, returns the iterator to the last such element. Returns make_pair(first, first) if the range is empty.
Note
Complexity Given N as std::distance(first, last), at most max(floor(3*(N-1)/2), 0) applications of the comparator operator<.

◆ minmax_element() [2/2]

template<class ForwardIterator, class Compare, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_compare_v< Compare &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::minmax_element ( ForwardIterator first,
ForwardIterator last,
Compare comp ) -> std::pair<ForwardIterator, ForwardIterator>
constexprnoexcept

returns the smallest and largest elements in a range

Template Parameters
ForwardIteratoriterator type
Comparebinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
compbinary predicate which returns true if the first argument is ordered before the second
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression comp(e1, e2) must be convertible to bool for every argument e1, e2 of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e1 or e2.

Finds both the first smallest element, i.e. the element ordered before all other elements, and the last largest element, i.e. the element ordered after all other elements, in the range [first, last).

Returns
pair of iterators to the smallest element of the range [first, last). If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. If several elements in the range are equivalent to the largest element, returns the iterator to the last such element. Returns make_pair(first, first) if the range is empty.
Note
Complexity Given N as std::distance(first, last), at most max(floor(3*(N-1)/2), 0) applications of the comparator comp.

◆ move() [1/3]

template<typename InputIterator, typename OutputIterator, arene::base::constraints< enable_if_t< internal::has_basic_input_iterator_operations_v< InputIterator > >, enable_if_t< internal::has_basic_output_iterator_operations_v< OutputIterator > >, enable_if_t<!internal::is_indirectly_move_assignable_v< InputIterator, OutputIterator > > > = nullptr>
auto std::move ( InputIterator begin,
InputIterator end,
OutputIterator result ) -> OutputIterator

Move elements from a source range to a destination range. Implements std::move.

For each element e in the half-open range [begin,end) writes std::move(e) to *result and increments result.

This overload is to generate an error for the case that the elements from the source cannot be assigned to the destination

Template Parameters
InputIteratorThe type of the iterators denoting the input range.
OutputIteratorThe type of the iterator for the output range
Parameters
beginThe start of the source range
endThe end of the source range
resultThe start of the destination range
Returns
An OutputIterator equivalent to the final value of result
Precondition
InputIterator must satisfy the input iterator requirements.
[begin,end) must be a valid range.
OutputIterator must satisfy the output iterator requirements.
result must be a valid iterator for an output range that can be written to at least as many times as there are elements in the input range.
The value types of the input and output range must be compatible such that *result=std::move(*begin) is well-formed.
Exceptions
Anyexception thrown by the iteration or move-assignment operations

◆ move() [2/3]

template<typename InputIterator, typename OutputIterator, arene::base::constraints< enable_if_t< internal::has_basic_input_iterator_operations_v< InputIterator > >, enable_if_t< internal::has_basic_output_iterator_operations_v< OutputIterator > >, enable_if_t< internal::is_indirectly_move_assignable_v< InputIterator, OutputIterator > > > = nullptr>
auto std::move ( InputIterator begin,
InputIterator end,
OutputIterator result ) -> OutputIterator
constexprnoexcept

Move elements from a source range to a destination range. Implements std::move.

For each element e in the half-open range [begin,end) in order, writes std::move(e) to *result and increments result

Template Parameters
InputIteratorThe type of the iterators denoting the input range.
OutputIteratorThe type of the iterator for the output range
Parameters
beginThe start of the source range
endThe end of the source range
resultThe start of the destination range
Returns
An OutputIterator equivalent to the final value of result
Precondition
InputIterator must satisfy the input iterator requirements.
[begin,end) must be a valid range.
OutputIterator must satisfy the output iterator requirements.
result must be a valid iterator for an output range that can be written to at least as many times as there are elements in the input range.
The value types of the input and output range must be compatible such that *result=std::move(*begin) is well-formed.
Exceptions
Anyexception thrown by the iteration or move-assignment operations

◆ move() [3/3]

template<typename T>
auto std::move ( T && value) -> remove_reference_t<T>&&
constexprnoexcept

Cast a value to an rvalue.

Template Parameters
TThe type of the value
Parameters
valueThe value to cast
Returns
The supplied argument cast to an rvalue reference

◆ none_of()

template<typename InputIterator, typename Predicate, arene::base::constraints< enable_if_t< arene::base::is_input_iterator_v< InputIterator > >, enable_if_t< arene::base::is_predicate_v< Predicate &, arene::base::algorithm_detail::iter_reference_t< InputIterator > > > > = nullptr>
auto std::none_of ( InputIterator first,
InputIterator last,
Predicate pred ) -> bool
noexcept

Check if the predicate is false for every element in the range. Returns true if there is no element in the range for which the predicate returns true, false otherwise.

Template Parameters
InputIteratorThe type of the iterator used to mark the range
PredicateThe type of the predicate
Parameters
firstThe start of the range
lastThe end of the range
predThe predicate
Returns
true if there is no element in the range [first,last) for which pred(*it) returns true
Precondition
InputIterator must be an input iterator
[first,last) must denote a valid range
pred(*first) must be well-formed and return a boolean-testable value

◆ operator!=() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator!= ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if two iterators are not equal.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the iterators are not equal, and false otherwise

◆ operator!=() [2/3]

template<typename T1, typename T2>
auto std::operator!= ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if the first is not equal to the second. Uses the equality comparison operators of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is not equal to rhs, false otherwise
Precondition
T1 and T2 must have equality operators that provide an equivalency comparison

◆ operator!=() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator!= ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing an equality comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if any of the elements of left compare unequal to those of right, otherwise false

◆ operator+()

template<typename Iterator>
auto std::operator+ ( typename move_iterator< Iterator >::difference_type delta,
move_iterator< Iterator > const & iter ) -> move_iterator<Iterator>

Obtain a new iterator referencing the value from moving the specified iterator forwards by a specified amount.

Parameters
deltaThe amount to move
iterThe iterator to start from
Returns
A new iterator referencing the new value
Precondition
Iterator must be a random access iterator

◆ operator-()

template<typename Iterator1, typename Iterator2>
auto std::operator- ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) ->

Obtain the distance between two iterators.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The difference between the iterators

◆ operator<() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator< ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if one iterator is less than another.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the first iterator is less than the second, and false otherwise

◆ operator<() [2/3]

template<typename T1, typename T2>
auto std::operator< ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if the first is less than the second. Uses lexicographical ordering based on the less-than comparisons of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is less than rhs, false otherwise
Precondition
T1 and T2 must have less than operators that provide a strict weak ordering

◆ operator<() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator< ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing a lexicographic comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if a lexicographic comparison of the elements gives "less", otherwise false

◆ operator<=() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator<= ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if one iterator is less than or equal to another.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the first iterator is less than or equal to the second, and false otherwise

◆ operator<=() [2/3]

template<typename T1, typename T2>
auto std::operator<= ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if the first is less than or equal to the second. Uses lexicographical ordering based on the less-than comparisons of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is less than or equal to rhs, false otherwise
Precondition
T1 and T2 must have less than operators that provide a strict weak ordering

◆ operator<=() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator<= ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing a lexicographic comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if a lexicographic comparison of the elements gives "less" or "equal", otherwise false

◆ operator==() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator== ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if two iterators are equal.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the iterators are equal, and false otherwise

◆ operator==() [2/3]

template<typename T1, typename T2>
auto std::operator== ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if they are equal, by checking if both members of the first are equal to the corresponding members of the second using the equality comparison operators of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is equal to rhs, false otherwise
Precondition
T1 and T2 must have equality operators that provide an equivalency comparison

◆ operator==() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator== ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing an equality comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if the elements of left all compare equal to those of right, otherwise false

◆ operator>() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator> ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if one iterator is greater than another.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the first iterator is greater than the second, and false otherwise

◆ operator>() [2/3]

template<typename T1, typename T2>
auto std::operator> ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if the first is greater than the second. Uses lexicographical ordering based on the less-than comparisons of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is greater than rhs, false otherwise
Precondition
T1 and T2 must have less than operators that provide a strict weak ordering

◆ operator>() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator> ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing a lexicographic comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if a lexicographic comparison of the elements gives "greater", otherwise false

◆ operator>=() [1/3]

template<typename Iterator1, typename Iterator2>
auto std::operator>= ( move_iterator< Iterator1 > const & lhs,
move_iterator< Iterator2 > const & rhs ) -> bool

Check if one iterator is greater than or equal to another.

Template Parameters
Iterator1The type of the first iterator
Iterator2The type of the second iterator
Parameters
lhsThe first iterator
rhsThe second iterator
Returns
The value true if the first iterator is greater than or equal to the second, and false otherwise

◆ operator>=() [2/3]

template<typename T1, typename T2>
auto std::operator>= ( pair< T1, T2 > const & lhs,
pair< T1, T2 > const & rhs ) -> bool
constexprnoexcept

Compare two pairs to see if the first is greater than or equal to the second. Uses lexicographical ordering based on the less-than comparisons of the members.

Template Parameters
T1The type of the first data member of the pairs being compared
T2The type of the second data member of the pairs being compared
Parameters
lhsThe first pair to compare
rhsThe second pair to compare
Returns
true if lhs is greater than or equal to rhs, false otherwise
Precondition
T1 and T2 must have less than operators that provide a strict weak ordering

◆ operator>=() [3/3]

template<class... LTypes, class... RTypes>
auto std::operator>= ( tuple< LTypes... > const & left,
tuple< RTypes... > const & right ) -> bool
constexprnoexcept

Compare two tuples by doing a lexicographic comparison on their elements starting from 0.

Template Parameters
LTypesThe element types of the left tuple
RTypesThe element types of the right tuple
Parameters
leftThe left tuple to compare
rightThe right tuple to compare
Returns
true if a lexicographic comparison of the elements gives "greater" or "equal", otherwise false

◆ partial_sort_copy() [1/2]

template<typename SourceIterator, typename TargetIterator, arene::base::constraints< enable_if_t< arene::base::denotes_range_v< SourceIterator > >, enable_if_t< arene::base::denotes_range_v< TargetIterator > >, enable_if_t< arene::base::is_random_access_iterator_v< TargetIterator > >, enable_if_t< is_assignable_v< arene::base::algorithm_detail::iter_reference_t< TargetIterator >, arene::base::algorithm_detail::iter_reference_t< SourceIterator > > >, enable_if_t< arene::base::is_less_than_comparable_v< arene::base::algorithm_detail::iter_reference_t< TargetIterator > > >, enable_if_t< is_move_assignable_v< arene::base::algorithm_detail::iter_value_t< TargetIterator > > >, enable_if_t< is_move_constructible_v< arene::base::algorithm_detail::iter_value_t< TargetIterator > > > > = nullptr>
auto std::partial_sort_copy ( SourceIterator source_begin,
SourceIterator source_end,
TargetIterator target_begin,
TargetIterator target_end ) -> TargetIterator

Copy the first K elements from the source range, as sorted with respect to operator< , into the target range, where K is the minimum of std::distance(source_begin,source_end) and std::distance(target_begin,target_end)

This performs at most N * (log2(K) + 1) comparisons, where N is std::distance(source_begin,source_end)

Template Parameters
SourceIteratorThe type of the iterator for the input range
TargetIteratorThe type of the iterator for the output range
Parameters
source_beginThe start of the input range
source_endThe end of the input range
target_beginThe start of the output range
target_endThe end of the output range
Returns
A TargetIterator referring to one-past the last stored element in the output
Precondition
The SourceIterator must be an input iterator, and [source_begin,source_end) must be a valid range
The TargetIterator must be a random access iterator, and [target_begin,target_end) must be a valid range
The result of dereferencing a source iterator must be assignable to the result of dereferencing a target iterator
The value type of the iterators must be less-than-comparable

◆ partial_sort_copy() [2/2]

template<typename SourceIterator, typename TargetIterator, typename Comparator, arene::base::constraints< enable_if_t< arene::base::denotes_range_v< SourceIterator > >, enable_if_t< arene::base::denotes_range_v< TargetIterator > >, enable_if_t< arene::base::is_random_access_iterator_v< TargetIterator > >, enable_if_t< is_assignable_v< arene::base::algorithm_detail::iter_reference_t< TargetIterator >, arene::base::algorithm_detail::iter_reference_t< SourceIterator > > >, enable_if_t< arene::base::is_less_than_comparable_v< arene::base::algorithm_detail::iter_reference_t< TargetIterator > > >, enable_if_t< is_move_assignable_v< arene::base::algorithm_detail::iter_value_t< TargetIterator > > >, enable_if_t< is_move_constructible_v< arene::base::algorithm_detail::iter_value_t< TargetIterator > > >, enable_if_t< arene::base::is_compare_v< Comparator &, arene::base::algorithm_detail::iter_reference_t< SourceIterator >, arene::base::algorithm_detail::iter_reference_t< TargetIterator > > >, enable_if_t< arene::base::is_compare_v< Comparator &, arene::base::algorithm_detail::iter_reference_t< TargetIterator > > > > = nullptr>
auto std::partial_sort_copy ( SourceIterator source_begin,
SourceIterator source_end,
TargetIterator target_begin,
TargetIterator target_end,
Comparator comp ) -> TargetIterator

Copy the first K elements from the source range, as sorted with respect to the supplied comparator, into the target range, where K is the minimum of std::distance(source_begin,source_end) and std::distance(target_begin,target_end).

This performs at most N * (log2(K) + 1) comparisons, where N is std::distance(source_begin,source_end)

Template Parameters
SourceIteratorThe type of the iterator for the input range
TargetIteratorThe type of the iterator for the output range
ComparatorThe comparator type
Parameters
source_beginThe start of the input range
source_endThe end of the input range
target_beginThe start of the output range
target_endThe end of the output range
compThe comparator
Returns
A TargetIterator referring to one-past the last stored element in the output
Precondition
The SourceIterator must be an input iterator, and [source_begin,source_end) must be a valid range
The TargetIterator must be a random access iterator, and [target_begin,target_end) must be a valid range
The result of dereferencing a source iterator must be assignable to the result of dereferencing a target iterator
The value type of the iterators must be less-than-comparable
The comparator must be a binary predicate such that comp(*source_begin,*target_begin) and comp(*target_begin,*target_begin) are both well-formed and convertible to bool

◆ ref() [1/3]

template<typename T>
auto std::ref ( reference_wrapper< T > other) -> reference_wrapper<T>
noexcept

Create a type-deduced copy of a reference_wrapper.

Template Parameters
TType wrapped by the input wrapper
Parameters
otherreference_wrapper to copy
Returns
A copy of the input reference_wrapper

◆ ref() [2/3]

template<typename T>
auto std::ref ( T && )
delete

Cannot create a reference_wrapper from an rvalue reference.

Template Parameters
Ttype of the reference

◆ ref() [3/3]

template<typename T>
auto std::ref ( T & to_wrap) -> reference_wrapper<T>
noexcept

Create a type-deduced reference_wrapper.

Template Parameters
Ttype of the reference
Parameters
to_wrapObject or function to wrap
Returns
A reference_wrapper around the input

◆ remove_if()

template<class I, class P, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< I > >, std::enable_if_t< std::internal::named_requirement::is_move_assignable_v< arene::base::algorithm_detail::iter_value_t< I > > >, std::enable_if_t< arene::base::is_predicate_v< P &, arene::base::algorithm_detail::iter_reference_t< I > > > > = nullptr>
auto std::remove_if ( I first,
I last,
P pred ) -> I
noexcept

removes elements satisfying specific criteria

Template Parameters
Iforward iterator type
Premoval predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
predunary predicate which returns true if the element should be removed
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression pred(v) must be convertible to bool for every argument r of type RT, where RT is the reference type of I, regardless of value category, and must not modify r.

Removes all elements satisfying specific criteria from the range [first, last) and returns a past-the-end iterator for the new end of the range.

Removal is performed by shifting the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range. The relative ordering of non removed elements is maintained by std::remove_if.

Returns
past-the-end iterator for the new range of values. If this is not end(), then it points to an unspecified value, and so do iterators to any values between this iterator and end().
Note
Complexity Given N as std::distance(first, last), exactly N applications of the predicate pred.

◆ reverse()

template<typename BidirIt, arene::base::constraints< std::enable_if_t< arene::base::is_bidirectional_iterator_v< BidirIt > >, std::enable_if_t< arene::base::is_swappable_v< typename std::iterator_traits< BidirIt >::value_type > > > = nullptr>
auto std::reverse ( BidirIt first,
BidirIt last ) -> void
constexprnoexcept

reverses the order of elements in a range

Template Parameters
BidirItThe iterator used to iterate over the input range
Parameters
firstthe beginning of the range
lastthe end of the range

◆ sort() [1/2]

template<class I, class = enable_if_t< arene::base::is_random_access_iterator_v<I> && arene::base::is_swappable_v<arene::base::algorithm_detail::iter_reference_t<I>> && arene::base::is_movable_v<arene::base::remove_cvref_t<arene::base::algorithm_detail::iter_reference_t<I>>> && arene::base::is_compare_v< &, arene::base::algorithm_detail::iter_reference_t<I>> >>
auto std::sort ( I first,
I last ) -> void
noexcept

sorts a range into ascending order

Template Parameters
Iiterator type
Parameters
firstbeginning of the range
lastend of the range
Precondition
I must satisfy the random access iterator requirements.
I must be ValueSwappable.
the type of *first must be Movable.
[first, last) must be a valid range.
The expression r1 < r2 must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
operator< must define a strict weak ordering relation. For values a, b, and c, the following properties must be satisfied:
  • irreflexivity: a < a is false
  • transitivity: if a < b and b < c are both true, then a < c is true
  • transitivity of incomparability: let e(a, b) be !(a < b) && !(b < a) , then e is transitive

Sorts the elements in the range [first, last) in non-descending order, specified by operator<. The order of equal elements is not guaranteed to be preserved.

Note
Complexity Given N as last - first , O(N * log(N)) applications of operator<.

◆ sort() [2/2]

template<class I, class C, class = enable_if_t< arene::base::is_random_access_iterator_v<I> && arene::base::is_swappable_v<arene::base::algorithm_detail::iter_reference_t<I>> && arene::base::is_movable_v<arene::base::remove_cvref_t<arene::base::algorithm_detail::iter_reference_t<I>>> && arene::base::is_compare_v<C&, arene::base::algorithm_detail::iter_reference_t<I>> >>
auto std::sort ( I first,
I last,
C comp ) -> void
noexcept

sorts a range into ascending order

Template Parameters
Iiterator type
Ccompare type
Parameters
firstbeginning of the range
lastend of the range
compcomparison function object
Precondition
I must satisfy the random access iterator requirements.
I must be ValueSwappable.
the type of *first must be Movable.
[first, last) must be a valid range.
The expression comp(r1, r2) must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
comp must define a strict weak ordering relation. For values a, b, and c, the following properties must be satisfied:
  • irreflexivity: comp(a, a) is false
  • transitivity: if comp(a, b) and comp(b, c) are both true, then pred(a, c) is true
  • transitivity of incomparability: let e(a, b) be !comp(a, b) && !comp(b, a) , then e is transitive

Sorts the elements in the range [first, last) in non-descending order, specified by comp. The order of equal elements is not guaranteed to be preserved.

Postcondition
is_sorted(first, last, comp) is true
Note
Complexity Given N as last - first , O(N * log(N)) applications of comp.

◆ stable_sort() [1/2]

template<class I, class = enable_if_t< arene::base::is_random_access_iterator_v<I> && arene::base::is_swappable_v<arene::base::algorithm_detail::iter_reference_t<I>> && arene::base::is_movable_v<arene::base::remove_cvref_t<arene::base::algorithm_detail::iter_reference_t<I>>> && arene::base::is_compare_v< &, arene::base::algorithm_detail::iter_reference_t<I>> >>
auto std::stable_sort ( I first,
I last ) -> void
noexcept

sorts a range into ascending order

Template Parameters
Iiterator type
Parameters
firstbeginning of the range
lastend of the range
Precondition
I must satisfy the random access iterator requirements.
I must be ValueSwappable.
the type of *first must be Movable.
[first, last) must be a valid range.
The expression comp(r1, r2) must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
comp must define a strict weak ordering relation. For values a, b, and c, the following properties must be satisfied:
  • irreflexivity: comp(a, a) is false
  • transitivity: if comp(a, b) and comp(b, c) are both true, then comp(a, c) is true
  • transitivity of incomparability: let e(a, b) be !comp(a, b) && !comp(b, a) , then e is transitive

Sorts the elements in the range [first, last) in non-descending order, specified by operator<. The order of equal elements is guaranteed to be preserved.

Postcondition
is_sorted(first, last) is true
Note
Complexity
  • Given N as last - first , worst case of O(N * log(N)) applications of operator<.
This sorting algorithm is stable.

◆ stable_sort() [2/2]

template<class I, class C, class = enable_if_t< arene::base::is_random_access_iterator_v<I> && arene::base::is_swappable_v<arene::base::algorithm_detail::iter_reference_t<I>> && arene::base::is_movable_v<arene::base::remove_cvref_t<arene::base::algorithm_detail::iter_reference_t<I>>> && arene::base::is_compare_v<C&, arene::base::algorithm_detail::iter_reference_t<I>> >>
auto std::stable_sort ( I first,
I last,
C comp ) -> void
noexcept

sorts a range into ascending order

Template Parameters
Iiterator type
Ccompare type
Parameters
firstbeginning of the range
lastend of the range
compcomparison function object
Precondition
I must satisfy the random access iterator requirements.
I must be ValueSwappable.
the type of *first must be Movable.
[first, last) must be a valid range.
The expression comp(r1, r2) must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
comp must define a strict weak ordering relation. For values a, b, and c, the following properties must be satisfied:
  • irreflexivity: comp(a, a) is false
  • transitivity: if comp(a, b) and comp(b, c) are both true, then comp(a, c) is true
  • transitivity of incomparability: let e(a, b) be !comp(a, b) && !comp(b, a) , then e is transitive

Sorts the elements in the range [first, last) in non-descending order, specified by comp. The order of equal elements is guaranteed to be preserved.

Postcondition
is_sorted(first, last, comp) is true
Note
Complexity
  • Given N as last - first , worst case of O(N * log(N)) applications of comp.
This sorting algorithm is stable.

◆ swap() [1/4]

template<typename T1, typename T2, arene::base::constraints< enable_if_t< arene::base::is_swappable_v< T1 > >, enable_if_t< arene::base::is_swappable_v< T2 > > > = nullptr>
void std::swap ( pair< T1, T2 > & lhs,
pair< T1, T2 > & rhs )
noexcept

Swap a pair with another instance of the same type. Swaps lhs.first with rhs.first and swaps lhs.second with rhs.second.

This is disabled if either T1 or T2 is not swappable

Parameters
lhsThe first pair to swap
rhsThe second pair to swap

◆ swap() [2/4]

auto std::swap ( T & lhs,
T & rhs ) -> void
constexprnoexcept

swaps the values of two objects

Template Parameters
Ttype of the objects to swap
Parameters
lhsobject to swap
rhsobject to swap

◆ swap() [3/4]

auto std::swap ( T(&) lhs[N],
T(&) rhs[N] ) -> void
constexprnoexcept

swaps the contents of two arrays

Template Parameters
Ttype of the objects in the arrays to swap
Parameters
lhsarray to swap
rhsarray to swap

◆ swap() [4/4]

template<class... Types, arene::base::constraints< enable_if_t< arene::base::all_of_v< arene::base::is_swappable_v< Types >... > > > = nullptr>
auto std::swap ( tuple< Types... > & lhs,
tuple< Types... > & rhs ) -> void
noexcept

swap two tuples

Template Parameters
TypesThe types in the two tuples to be swapped
Parameters
lhsthe first tuple to swap
rhsthe second tuple to swap
Postcondition
Equivalent to having invoked swap(get<Idx>(lhs),get<Idx>(rhs)) for every element.
Note
Requires:

◆ terminate()

void std::terminate ( )
noexcept

function called when exception handling fails

Note
This is an incomplete implementation of std::terminate that is only enough to allow use of //arene/base:contracts within //stdlib.

◆ tie()

template<class... Types>
auto std::tie ( Types &... args) -> tuple<Types&...>
constexprnoexcept

Constructs a tuple of references to the given arguments.

Template Parameters
TypesTypes of the arguments.
Parameters
argsReferences to the values to include in the tuple.
Returns
A tuple containing references to the input arguments.

◆ tuple_cat()

template<class... Tuples, class>
auto std::tuple_cat ( Tuples &&... tuples) ->
constexprnoexcept

concatenate tuples

Template Parameters
Tuplestypes of the tuples to concatenate
Parameters
tuplesstd::tuple objects to concatenate
Returns
std::tuple whose elements are the concatenation of tuples in order
Precondition
Every argument must be an std::tuple or std::pair Passing non-std::tuple tuple-likes to std::tuple_cat is undefined behavior per the standard; use arene::base::tuple_cat for those.

◆ unique() [1/2]

template<class I, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< I > >, std::enable_if_t< internal::named_requirement::is_move_assignable_v< arene::base::algorithm_detail::iter_value_t< I > > >, std::enable_if_t< arene::base::is_predicate_v< arene::base::algorithm_detail::operator_equal_t &, arene::base::algorithm_detail::iter_reference_t< I >, arene::base::algorithm_detail::iter_reference_t< I > > > > = nullptr>
auto std::unique ( I first,
I last ) -> I
noexcept

removes consecutive elements in a range

Template Parameters
Iforward iterator type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression pred(r1, r2) must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
operator== must define an equivalence relation. For values a, b, and c, the following properties must be satisfied:
  • reflexivity: pred(a, a) is true
  • symmetry: pred(a, b) == pred(b, a) is true
  • transitivity: if pred(a, b) and pred(b, c) are both true, then pred(a, c) is true

Removes all except the first element from a consecutive group of equal elements in the range [first, last) , and and returns a past-the-end iterator for the new end of the range.

Removal is performed by shifting the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range. The relative ordering of non removed elements is maintained by std::unique, (i.e. relative ordering is stable).

Returns
past-the-end iterator for the new range of values. If this is not end(), then it points to an unspecified value, and so do iterators to any values between this iterator and end().
Note
Complexity Given N as std::distance(first, last) , exactly max(0, N - 1) applications of operator==.

◆ unique() [2/2]

template<class I, class P, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< I > >, std::enable_if_t< internal::named_requirement::is_move_assignable_v< arene::base::algorithm_detail::iter_value_t< I > > >, std::enable_if_t< arene::base::is_binary_predicate_v< P &, arene::base::algorithm_detail::iter_reference_t< I > > > > = nullptr>
auto std::unique ( I first,
I last,
P pred ) -> I
noexcept

removes consecutive elements in a range

Template Parameters
Iforward iterator type
Pbinary predicate type
Parameters
firstbeginning of the range of elements
lastend of the range of elements
predbinary predicate which returns true if the elements are equivalent
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression pred(r1, r2) must be convertible to bool for every argument r1 and r2 of type RT, where RT is the reference type of I, regardless of value category, and must not modify r1 or r2.
pred must define an equivalence relation. For values a, b, and c, the following properties must be satisfied:
  • reflexivity: pred(a, a) is true
  • symmetry: pred(a, b) == pred(b, a) is true
  • transitivity: if pred(a, b) and pred(b, c) are both true, then pred(a, c) is true

Removes all except the first element from a consecutive group of equivalent elements in the range [first, last) , and and returns a past-the-end iterator for the new end of the range.

Removal is performed by shifting the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range. The relative ordering of non removed elements is maintained by std::unique, (i.e. relative ordering is stable).

Returns
past-the-end iterator for the new range of values. If this is not end(), then it points to an unspecified value, and so do iterators to any values between this iterator and end().
Note
Complexity Given N as std::distance(first, last) , exactly max(0, N - 1) applications of the predicate pred.

◆ upper_bound() [1/2]

template<class ForwardIterator, class T, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_binary_predicate_v< &, T const &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::upper_bound ( ForwardIterator first,
ForwardIterator last,
T const & value ) -> ForwardIterator
constexprnoexcept

returns an iterator to the first element greater than the given value

Template Parameters
ForwardIteratoriterator type
Tvalue type to compare against
Comparebinary predicate type
Parameters
firstbeginning of the partitioned range of elements
lastend of the partitioned range of elements
valuevalue to compare elements to
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression value < e must be convertible to bool for every argument e of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e or value.
The elements e of [begin, end) must be partitioned with respect to the expression value < e.
Returns
iterator to the first element of the range [first, last) ordered after value, or last if no such element is found.
Note
Complexity Given N as std::distance(first, last), at most log2(N) + O(1) comparisons with value using operator<.

◆ upper_bound() [2/2]

template<class ForwardIterator, class T, class Compare, arene::base::constraints< std::enable_if_t< arene::base::is_forward_iterator_v< ForwardIterator > >, std::enable_if_t< arene::base::is_binary_predicate_v< Compare &, T const &, arene::base::algorithm_detail::iter_reference_t< ForwardIterator > > > > = nullptr>
auto std::upper_bound ( ForwardIterator first,
ForwardIterator last,
T const & value,
Compare comp ) -> ForwardIterator
constexprnoexcept

returns an iterator to the first element greater than the given value

Template Parameters
ForwardIteratoriterator type
Tvalue type to compare against
Comparebinary predicate type
Parameters
firstbeginning of the partitioned range of elements
lastend of the partitioned range of elements
valuevalue to compare elements to
compbinary predicate which returns true if the first argument is ordered before the second
Precondition
ForwardIterator must satisfy the forward iterator requirements.
[begin, end) must be a valid range.
The expression comp(value, e) must be convertible to bool for every argument e of type RT, where RT is the reference type of ForwardIterator, regardless of value category, and must not modify e or value.
The elements e of [begin, end) must be partitioned with respect to the expression comp(value, e).
Returns
iterator to the first element of the range [first, last) ordered after value, or last if no such element is found.
Note
Complexity Given N as std::distance(first, last), at most log2(N) + O(1) applications of the comparator comp.

Variable Documentation

◆ extent_v

template<class T, unsigned N = 0>
auto std::extent_v = size_t{}
externconstexpr

obtains the size of an array type along a specified dimension

Template Parameters
Ttype to query
Nspecified array dimension

If T is an array type of rank greater than N, obtains the bound of the N 'th dimension of T as the value. If T is an array type of unknown bound, then the value is 0. In all other cases, value is 0.

◆ extent_v< T[], 0 >

template<class T>
auto std::extent_v< T[], 0 > = size_t{}
externconstexpr

obtains the size of an array type along a specified dimension

Template Parameters
Ttype to query

If T is an array type of rank greater than N, obtains the bound of the N 'th dimension of T as the value. If T is an array type of unknown bound, then the value is 0. In all other cases, value is 0.

◆ extent_v< T[], N >

template<class T, unsigned N>
auto std::extent_v< T[], N > = extent_v<T, N - 1>
externconstexpr

obtains the size of an array type along a specified dimension

Template Parameters
Ttype to query
Nspecified array dimension

If T is an array type of rank greater than N, obtains the bound of the N 'th dimension of T as the value. If T is an array type of unknown bound, then the value is 0. In all other cases, value is 0.

◆ extent_v< T[I], 0 >

template<class T, size_t I>
auto std::extent_v< T[I], 0 > = size_t{I}
externconstexpr

obtains the size of an array type along a specified dimension

Template Parameters
Ttype to query
Iarray bound at dimension 0

If T is an array type of rank greater than N, obtains the bound of the N 'th dimension of T as the value. If T is an array type of unknown bound, then the value is 0. In all other cases, value is 0.

◆ extent_v< T[I], N >

template<class T, size_t I, unsigned N>
auto std::extent_v< T[I], N > = extent_v<T, N - 1>
externconstexpr

obtains the size of an array type along a specified dimension

Template Parameters
Ttype to query
Iarray bound at dimension 0
Nspecified array dimension

If T is an array type of rank greater than N, obtains the bound of the N 'th dimension of T as the value. If T is an array type of unknown bound, then the value is 0. In all other cases, value is 0.

◆ ignore

auto const& std::ignore = ignore_detail::ignore<>
staticconstexpr

An object to which anything can be assigned, which ignores the assigned value.

◆ integral_constant< Type, Value >::value

template<typename Type, Type Value>
Type std::integral_constant< Type, Value >::value
constexpr

Out-of-line definition for the value constant.

Template Parameters
TypeThe type of the value
ValueThe value of the constant

◆ is_abstract_v

template<class T>
bool std::is_abstract_v = __is_abstract(T)
externconstexpr

Type trait to detect if a type is an abstract class.

Template Parameters
Ttype may be an abstract class

◆ is_arithmetic_v

template<typename Type>
bool std::is_arithmetic_v = is_integral_v<Type> || is_floating_point_v<Type>
externconstexpr

A type trait to check if a type is an arithmetic type. The value is true if Type is an arithmetic type, false otherwise.

Template Parameters
TypeThe type to check

◆ is_array_v

template<typename Type>
bool std::is_array_v = false
externconstexpr

A type trait to check if a type is an array. The value is true if Type is an array, false otherwise.

Template Parameters
TypeThe type to check

◆ is_array_v< Type[]>

template<typename Type>
bool std::is_array_v< Type[]> = true
externconstexpr

A type trait to check if a type is an array. The value is true if Type is an array, false otherwise.

Template Parameters
TypeThe type to check

◆ is_array_v< Type[N]>

template<typename Type, size_t N>
bool std::is_array_v< Type[N]> = true
externconstexpr

A type trait to check if a type is an array. The value is true if Type is an array, false otherwise.

Template Parameters
TypeThe type to check

◆ is_assignable_v

template<typename To, typename From>
bool std::is_assignable_v = is_assignable_detail::is_assignable_v<To, From>
externconstexpr

Type trait to detect if an instance of To is assignable to from arguments of From.

Template Parameters
ToThe type of the value to (try to) assign to
FromThe type of the value to (try to) assign from

◆ is_base_of_v

template<typename Base, typename Derived>
bool std::is_base_of_v = __is_base_of(Base, Derived)
externconstexpr

Type trait to detect if Base is a base class of Derived.

Template Parameters
BaseThe type which may be a base class
DerivedThe type which may be a derived class

◆ is_class_v

template<typename Type>
bool std::is_class_v = __is_class(Type)
externconstexpr

A type trait to check if a type is a class. The value is true if Type is a class, false otherwise.

Template Parameters
TypeThe type to check

◆ is_const_v

template<typename Type>
bool std::is_const_v = false
externconstexpr

A type trait to check if a type is const. The value is true if Type is const, false otherwise.

Template Parameters
TypeThe type to check

◆ is_const_v< Type const >

template<typename Type>
bool std::is_const_v< Type const > = true
externconstexpr

A type trait to check if a type is const. The value is true if Type is const, false otherwise.

Template Parameters
TypeThe type to check, without const

◆ is_constructible_v

template<typename Type, typename... Args>
bool std::is_constructible_v = __is_constructible(Type, Args...)
externconstexpr

Type trait to detect if a type is constructible from arguments of the specified types.

Template Parameters
TypeThe type to (try to) construct
ArgsThe types of the arguments to (try to) construct from

◆ is_convertible_v

template<typename From, typename To>
bool std::is_convertible_v = is_convertible_detail::is_convertible_v<From, To>
externconstexpr

Type trait to detect if one type is convertible to another.

Template Parameters
FromThe type to (try to) convert from
ToThe type to (try to) convert to

◆ is_copy_assignable_v

template<typename T>
bool std::is_copy_assignable_v = is_copy_assignable_detail::is_copy_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is copy assignable.

Template Parameters
TThe type of the value to check

◆ is_copy_constructible_v

template<typename T>
bool std::is_copy_constructible_v = is_copy_constructible_detail::is_copy_constructible_v<T>
externconstexpr

Type trait to detect if an instance of T is copy constructible.

Template Parameters
TThe type of the value to check

◆ is_default_constructible_v

template<typename T>
bool std::is_default_constructible_v = is_constructible_v<T>
externconstexpr

Type trait to detect if an instance of T is default constructible.

Template Parameters
TThe type of the value to check

◆ is_destructible_v

template<typename Type>
bool std::is_destructible_v
externconstexpr
Initial value:
@ not_destructible
Definition is_destructible.hpp:54
constexpr auto destructible_result_v
Type trait to check whether a type is destructible, and if so, if it is no-throw destructible.

Type trait to detect if a type is destructible.

Template Parameters
TypeThe type to (try to) destruct

◆ is_empty_v

template<typename Type>
bool std::is_empty_v = __is_empty(Type)
externconstexpr

Type trait to check if a type is an empty type. true if it is, false otherwise.

Template Parameters
TypeThe type to check

◆ is_enum_v

template<typename Type>
bool std::is_enum_v = __is_enum(Type)
externconstexpr

Type trait to check if a type is an enumeration. true if it is, false otherwise.

Template Parameters
TypeThe type to check

◆ is_final_v

template<typename Type>
bool std::is_final_v = __is_final(Type)
externconstexpr

Type trait to check if a type is a final class. true if it is, false otherwise.

Template Parameters
TypeThe type to check

◆ is_floating_point_v

template<typename Type>
bool std::is_floating_point_v = is_floating_point_detail::is_floating_point_v<remove_cv_t<Type>>
externconstexpr

A type trait to check if a type is floating point. The value is true if Type is a floating point type, false otherwise.

Template Parameters
TypeThe type to check

◆ is_function_v

template<typename Type>
bool std::is_function_v = not is_const_v<Type const> and not is_reference_v<Type>
externconstexpr

A type trait to check if a type is a function. The value is true if Type is a function, false otherwise. Adding a cv-qualifier sequence on top of a function type causes the cv-qualifier to be ignored.

Template Parameters
TypeThe type to check

◆ is_fundamental_v

template<typename T>
bool std::is_fundamental_v = is_arithmetic_v<T> || is_void_v<T> || is_same_v<remove_cv_t<T>, nullptr_t>
externconstexpr

Check if the supplied template argument is a fundamental type or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_integral_v

template<typename Type>
bool std::is_integral_v = is_integral_detail::is_integral_v<remove_cv_t<Type>>
externconstexpr

A type trait to check if a type is integral. The value is true if Type is an integral type, false otherwise.

Template Parameters
TypeThe type to check

◆ is_lvalue_reference_v

template<typename T>
bool std::is_lvalue_reference_v = false
externconstexpr

Check if the supplied template argument is an lvalue reference or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_lvalue_reference_v< T & >

template<typename T>
bool std::is_lvalue_reference_v< T & > = true
externconstexpr

Check if the supplied template argument is an lvalue reference or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_member_function_pointer_v

template<typename T>
bool std::is_member_function_pointer_v
externconstexpr
Initial value:

Check if the supplied template argument is a member function pointer or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_member_object_pointer_v

template<typename T>
bool std::is_member_object_pointer_v
externconstexpr
Initial value:

Check if the supplied template argument is a member object pointer or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_member_pointer_v

template<typename T>
bool std::is_member_pointer_v = is_member_pointer_detail::is_member_pointer_impl<remove_cv_t<T>>
externconstexpr

Check if the supplied template argument is a member pointer or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_move_assignable_v

template<typename T>
bool std::is_move_assignable_v = is_move_assignable_detail::is_move_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is move assignable.

Template Parameters
TThe type of the value to check

◆ is_move_constructible_v

template<typename T>
bool std::is_move_constructible_v = is_move_constructible_detail::is_move_constructible_v<T>
externconstexpr

Type trait to detect if an instance of T is move constructible.

Template Parameters
TThe type of the value to check

◆ is_nothrow_assignable_v

template<typename To, typename From>
bool std::is_nothrow_assignable_v = is_nothrow_assignable_detail::is_nothrow_assignable_v<To, From>
externconstexpr

Type trait to detect if an instance of To is assignable to from arguments of From without throwing.

Template Parameters
ToThe type of the value to (try to) assign to
FromThe type of the value to (try to) assign from

◆ is_nothrow_constructible_v

template<typename Type, typename... Args>
bool std::is_nothrow_constructible_v = is_nothrow_constructible<Type, Args...>::value
externconstexpr

Type trait to detect if a type is constructible from arguments of the specified types and is noexcept.

Template Parameters
TypeThe type to (try to) construct
ArgsThe types of the arguments to (try to) construct from
Note
This type trait also implicitly checks if the destructor is noexcept.

◆ is_nothrow_copy_assignable_v

template<typename T>
bool std::is_nothrow_copy_assignable_v = is_copy_assignable_detail::is_nothrow_copy_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is copy assignable without throwing.

Template Parameters
TThe type of the value to check

◆ is_nothrow_copy_constructible_v

template<typename T>
bool std::is_nothrow_copy_constructible_v
externconstexpr
Initial value:
=
constexpr bool is_nothrow_copy_constructible_v
Type trait to detect if an instance of T is copy constructible without throwing.

Type trait to detect if an instance of T is copy constructible without throwing.

Template Parameters
TThe type of the value to check

◆ is_nothrow_default_constructible_v

template<typename T>
bool std::is_nothrow_default_constructible_v = is_nothrow_constructible_v<T>
externconstexpr

Type trait to detect if an instance of T is default constructible without throwing.

Template Parameters
TThe type of the value to check

◆ is_nothrow_destructible_v

template<typename Type>
bool std::is_nothrow_destructible_v
externconstexpr
Initial value:

Type trait to detect if a type is destructible without throwing an exception.

Template Parameters
TypeThe type to (try to) destruct

◆ is_nothrow_move_assignable_v

template<typename T>
bool std::is_nothrow_move_assignable_v = is_move_assignable_detail::is_nothrow_move_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is move assignable without throwing.

Template Parameters
TThe type of the value to check

◆ is_nothrow_move_constructible_v

template<typename T>
bool std::is_nothrow_move_constructible_v
externconstexpr
Initial value:
=
constexpr bool is_nothrow_move_constructible_v
Type trait to detect if an instance of T is move constructible without throwing.

Type trait to detect if an instance of T is move constructible without throwing.

Template Parameters
TThe type of the value to check

◆ is_object_v

template<typename T>
bool std::is_object_v = !is_void_v<T> && !is_same_v<remove_const_t<T>, remove_const_t<T> const>
externconstexpr

Check if the supplied template argument is an object or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_pointer_v

template<typename T>
bool std::is_pointer_v = is_pointer_detail::is_pointer_impl<remove_cv_t<T>>
externconstexpr

Check if the supplied template argument is a pointer or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_reference_v

template<typename T>
bool std::is_reference_v = is_lvalue_reference_v<T> || is_rvalue_reference_v<T>
externconstexpr

Check if the supplied template argument is a reference or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_rvalue_reference_v

template<typename T>
bool std::is_rvalue_reference_v = false
externconstexpr

Check if the supplied template argument is an rvalue reference or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_rvalue_reference_v< T && >

template<typename T>
bool std::is_rvalue_reference_v< T && > = true
externconstexpr

Check if the supplied template argument is an rvalue reference or not. The value is true if so, false otherwise.

Template Parameters
TThe type to check

◆ is_same_v

template<typename T1, typename T2>
bool std::is_same_v = false
externconstexpr

Trait to detect if the two supplied types are the same or not. The value is true if the types are the same, false otherwise.

Template Parameters
T1The first type
T2The second type

◆ is_same_v< T, T >

template<typename T>
bool std::is_same_v< T, T > = true
externconstexpr

Trait to detect if the two supplied types are the same or not. The value is true if the types are the same, false otherwise.

Template Parameters
TThe type

◆ is_signed_v

template<typename Type>
bool std::is_signed_v = is_signed_detail::is_signed_v<Type>
externconstexpr

A type trait to check if a type is signed. The value is true if Type is a signed type, false otherwise.

Template Parameters
TypeThe type to check

◆ is_trivially_copy_assignable_v

template<typename T>
bool std::is_trivially_copy_assignable_v = is_copy_assignable_detail::is_trivially_copy_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is trivially copy assignable.

Template Parameters
TThe type of the value to check

◆ is_trivially_copy_constructible_v

template<typename T>
bool std::is_trivially_copy_constructible_v
externconstexpr
Initial value:
=
constexpr bool is_trivially_copy_constructible_v
Type trait to detect if an instance of T is trivially copy constructible.

Type trait to detect if an instance of T is trivially copy constructible.

Template Parameters
TThe type of the value to check

◆ is_trivially_copyable_v

template<typename T>
bool std::is_trivially_copyable_v = __is_trivially_copyable(remove_volatile_t<T>)
externconstexpr

Type trait to detect if an instance of T is trivially copyable.

Template Parameters
TThe type of the value to check
Note
The original C++14 standard says volatile qualified types are not trivially copyable. This was changed with CWG issue 2094, which was accepted as a DR in 2016: https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2094 This implementations matches the post-CWG2094 behaviour, which is consistent with C++17 and later too.

◆ is_trivially_default_constructible_v

template<typename T>
bool std::is_trivially_default_constructible_v = __is_trivially_constructible(T)
externconstexpr

Type trait to detect if an instance of T is trivially default constructible.

Template Parameters
TThe type of the value to check

◆ is_trivially_destructible_v

template<typename Type>
bool std::is_trivially_destructible_v
externconstexpr
Initial value:
=
#define ARENE_STDLIB_TRIVIALLY_DESTRUCTIBLE_CHECK
Definition is_destructible.hpp:30
constexpr bool is_destructible_v
Type trait to detect if a type is destructible.

Type trait to detect if a type is trivially destructible.

Template Parameters
TypeThe type to (try to) destruct

◆ is_trivially_move_assignable_v

template<typename T>
bool std::is_trivially_move_assignable_v = is_move_assignable_detail::is_trivially_move_assignable_v<T>
externconstexpr

Type trait to detect if an instance of T is move assignable without throwing.

Template Parameters
TThe type of the value to check

◆ is_trivially_move_constructible_v

template<typename T>
bool std::is_trivially_move_constructible_v
externconstexpr
Initial value:
=
constexpr bool is_trivially_move_constructible_v
Type trait to detect if an instance of T is trivially move constructible.

Type trait to detect if an instance of T is trivially move constructible.

Template Parameters
TThe type of the value to check

◆ is_unsigned_v

template<typename Type>
bool std::is_unsigned_v = is_unsigned_detail::is_unsigned_v<Type>
externconstexpr

A type trait to check if a type is unsigned. The value is true if Type is an unsigned type, false otherwise.

Template Parameters
TypeThe type to check

◆ is_void_v

template<typename Type>
bool std::is_void_v = is_same_v<void, remove_cv_t<Type>>
externconstexpr

A type trait to check if a type is void. The value is true if Type is void, false otherwise.

Template Parameters
TypeThe type to check

◆ is_volatile_v

template<typename Type>
bool std::is_volatile_v = false
externconstexpr

A type trait to check if a type is volatile. The value is true if Type is volatile, false otherwise.

Template Parameters
TypeThe type to check

◆ is_volatile_v< Type volatile >

template<typename Type>
bool std::is_volatile_v< Type volatile > = true
externconstexpr

A type trait to check if a type is volatile. The value is true if Type is volatile, false otherwise.

Template Parameters
TypeThe type to check, without volatile

◆ nothrow

nothrow_t const std::nothrow
extern

A constant of std::nothrow_t.

◆ nullptr_t

using std::nullptr_t

The type of nullptr.

◆ piecewise_construct

piecewise_construct_t std::piecewise_construct {}
constexpr

Tag constant for piecewise construction.

◆ rank_v

template<class T>
auto std::rank_v = size_t{}
externconstexpr

obtains the number of dimensions of an array type

Template Parameters
Ttype to query

If T is an array type, provides the member constant value equal to the number of dimensions of the array. For any other type, value is 0.

◆ rank_v< T[]>

template<class T>
auto std::rank_v< T[]> = rank_v<T> + 1
externconstexpr

obtains the number of dimensions of an array type

Template Parameters
Ttype to query

If T is an array type, provides the member constant value equal to the number of dimensions of the array. For any other type, value is 0.

◆ rank_v< T[N]>

template<class T, size_t N>
auto std::rank_v< T[N]> = rank_v<T> + 1
externconstexpr

obtains the number of dimensions of an array type

Template Parameters
Ttype to query
Narray bound

If T is an array type, provides the member constant value equal to the number of dimensions of the array. For any other type, value is 0.

◆ tuple_size_v

template<class T>
std::size_t std::tuple_size_v {tuple_size<T>::value}
externconstexpr

obtain the number of elements in a tuple-like type

Template Parameters
Ttuple like type