utl Namespace Reference
Concepts » Iterators | CRTP idiom support header | Detection | operators | Invoke | Logic | selection | Sfinae | Typelist

STL's core language concepts. More...

## Namespaces

| _1wire_i_det
| common_impl
| detail
| details
| i2c_i_details
| idx_dev_details
| idxdev_it_details
| in_dev_details
| inbuf_dev_details
| indev_it_details
| meta
| out_dev_details
| outdev_it_details
| spi
| Abstract base class for spi bus.
| spi_i_details

## Classes

class | _1wire_i
| Template base class for 1-wire communication interface using CRTP. More...
class | _1wire_i< virtual_tag >
| A virtual base class implementation. More...
class | _1wire_id_t
class | _1wire_uart_i
| 1-wire UART interface template class using CRTP Using the private virtual interface we provide the interface from _1wire_i<> More...
class | _1wire_uart_i< virtual_tag >
| A virtual base class interface implementation. Using the private virtual interface we provide the interface from _1wire_i<virtual_tag> More...
struct | array
| A standard container for storing a fixed size sequence of elements. More...
struct | array_traits
| array container traits helper More...
struct | array_traits< _Tp, 0 >
struct | bidirectional_iterator_tag
struct | contiguous_iterator_tag
struct | crtp_tag
| CRTP support tag type. More...
struct | dev_iterator_traits
| Device iterator collection. More...
struct | forward_iterator_tag
class | i2c_bb_i
| A bit banking implementation of i2c bus inherited from i2c_i base class. More...
class | i2c_bb_i< virtual_tag >
| A virtual base class interface specialization. Using the private virtual interface we provide the interface from i2c_i<virtual_tag> More...
class | i2c_i
| Abstract base class for i2c bus. More...
class | i2c_i< virtual_tag >
| A virtual base class specialization. More...
struct | id_t
| A standard container for storing IDs as a fixed size sequence of bytes. This type is based on etl::array Meets the requirements of: container, reversible container, sequence. Sets support random access iterators. More...
struct | id_traits
| id container traits helper More...
struct | id_traits< _Tp, 0 >
class | idx_dev
| Abstract base class for indexed devices. More...
class | idx_dev< virtual_tag, data_t, idx_t, N >
| A virtual base class specialization. More...
class | in_dev
| Abstract base class for input devices. More...
class | in_dev< virtual_tag, data_t, streamsize >
| A virtual base class specialization. More...
class | inbuf_dev
| Abstract base class for input buffered devices. More...
class | inbuf_dev< virtual_tag, data_t, streamsize >
| A virtual base class specialization. More...
class | indev_it
| Input device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
struct | input_iterator_tag
class | iodev_it
| Indexed device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
struct | is_invocable
| std::is_invocable trait for C++11 More...
struct | is_invocable_r
| std::is_invocable_r trait for C++11 More...
class | istreamdev_it
class | ostream_dev
| Abstract base classes for output stream devices. More...
class | ostream_dev< virtual_tag, data_t >
class | ostreamdev_it
class | out_dev
| Abstract base classes for output devices. More...
class | out_dev< virtual_tag, data_t, streamsize >
| A virtual base class specialization. More...
class | outdev_it
| Output device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
struct | output_iterator_tag
| Iterator tags [std.iterator.tags] Extension: contiguous_iterator_tag for denoting contiguous iterators. More...
struct | random_access_iterator_tag
class | spi_bb_i
| A bit banking implementation of spi bus inherited from spi_i base class. More...
class | spi_bb_i< virtual_tag, CPOL, CPHA, BitOrder >
| A virtual base class interface specialization. Using the private virtual interface we provide the interface from spi_i<virtual_tag> More...
class | spi_i
class | spi_i< virtual_tag >
| A virtual base class implementation. More...
struct | virtual_tag
| virtual support tag type More...

## Typedefs

template<typename T >
using | remove_cvref_t = std::remove_cv_t< std::remove_reference_t< T > >
template<typename T >
using | cref_ = const std::remove_reference_t< T > &
template<typename T >
using | _ref_t = std::add_lvalue_reference_t< T >
template<typename _T1 , typename _T2 , typename _Ret = _T1>
using | use_if_same_t = meta::eval< meta::enable_if< meta::same_< _T1, _T2 >::value, _Ret > >
template<typename... Ts>
using | common_reference = common_impl::common_reference< Ts... >
template<typename... Ts>
using | common_reference_t = meta::eval< common_reference< Ts... > >
byte and word types
using | byte_t = uint8_t
| 8 bits wide More...
using | word_t = uint16_t
| 16 bits wide More...
using | dword_t = uint32_t
size and index
using | size_t = std::size_t
using | index_t = size_t
| index_t and size_t mend to be interchangeable More...
using | ptrdiff_t = std::ptrdiff_t
template<typename _Callable , typename... _Args>
using | invoke_result = detail::invoke_result_< is_invocable< _Callable, _Args... >::value, _Callable, _Args... >
| invoke_result (for C++14) More...
template<typename _Callable , typename... _Args>
using | invoke_result_t = meta::eval< invoke_result< _Callable, _Args... > >
| invoke_result_t (for C++14) More...

## Functions

template<typename _Tp , size_t _Nm>
void | swap (array< _Tp, _Nm > &lhs, array< _Tp, _Nm > &rhs) noexcept(noexcept(lhs.swap(rhs)))
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp & | get (array< _Tp, _Nm > &arr) noexcept
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp && | get (array< _Tp, _Nm > &&arr) noexcept
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr const _Tp & | get (const array< _Tp, _Nm > &arr) noexcept
template<typename _Callable , typename... _Args>
decltype(auto) | invoke (_Callable &&fn, _Args &&... args)
| Invoke a callable object (for C++14) More...
Array comparisons.
template<typename _Tp , size_t _Nm>
bool | operator== (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator!= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator< (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator> (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator<= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator>= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
device ID comparisons.
template<typename _Tp , size_t _Nm>
bool | operator== (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator!= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator< (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator> (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator<= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _Tp , size_t _Nm>
bool | operator>= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool | operator== (const istreamdev_it< _C1, _D1 > &lhs, const istreamdev_it< _C2, _D2 > &rhs) noexcept
| Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool | operator!= (const istreamdev_it< _C1, _D1 > &lhs, const istreamdev_it< _C2, _D2 > &rhs) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool | operator== (const outdev_it< _Cont1, _It1, _beg1, _end1 > &lhs, const outdev_it< _Cont2, _It2, _beg2, _end2 > &rhs) noexcept
| Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool | operator!= (const outdev_it< _Cont1, _It1, _beg1, _end1 > &lhs, const outdev_it< _Cont2, _It2, _beg2, _end2 > &rhs) noexcept
| Inequality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
indev_it EqualityComparable && LessThanComparable requirements
comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator== (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator< (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
| Less than. More...
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator!= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator<= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator> (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator>= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator== (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator< (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
| Less than. More...
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator!= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator<= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator> (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool | operator>= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
iterator arithmetic
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto | operator- (indev_it< _Cont1, _It1, _beg1, _size1 > &x, indev_it< _Cont1, _It1, _beg1, _size1 > &y) noexcept -> decltype(x.cursor() - y.cursor())
template<typename _Cont , typename _It , index_t _beg, size_t _size>
indev_it< _Cont, _It, _beg, _size > | operator+ (typename _Cont::difference_type n, indev_it< _Cont, _It, _beg, _size > &it) noexcept
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto | operator- (iodev_it< _Cont1, _It1, _beg1, _size1 > &x, iodev_it< _Cont1, _It1, _beg1, _size1 > &y) noexcept -> decltype(x.cursor() - y.cursor())
template<typename _Cont , typename _It , index_t _beg, size_t _size>
iodev_it< _Cont, _It, _beg, _size > | operator+ (typename _Cont::difference_type n, iodev_it< _Cont, _It, _beg, _size > &it) noexcept

## Variables

template<class I >
_utlConcept | WeaklyIncrementable
template<class T , class U >
_utlConcept | Same = meta::same_<T, U>::value
template<class Derived , class Base >
_utlConcept | DerivedFrom
template<class From , class To >
_utlConcept | ConvertibleTo = std::is_convertible<From, To>::value
template<class T , class U >
_utlConcept | CommonReference
template<class T , class U >
_utlConcept | Common
template<class T >
_utlConcept | Integral = std::is_integral<T>::value
template<class T >
_utlConcept | SignedIntegral = Integral<T> && std::is_signed<T>::value
template<class T >
_utlConcept | UnsignedIntegral = Integral<T> && !std::is_signed<T>::value
template<typename T >
_utlConcept | MoveAssignable = std::is_move_assignable<T>::value
template<typename T >
_utlConcept | CopyAssignable = std::is_copy_assignable<T>::value
template<class LHS , class RHS >
_utlConcept | Assignable
template<class T >
_utlConcept | Destructible = std::is_nothrow_destructible<T>::value
template<class T , class... Args>
_utlConcept | Constructible
template<class T >
_utlConcept | DefaultConstructible = Constructible<T>
template<class T >
_utlConcept | MoveConstructible
template<class T >
_utlConcept | CopyConstructible
template<class T >
_utlConcept | Movable
template<class T >
_utlConcept | Copyable
template<class B >
_utlConcept | Boolean
template<class T , class U >
_utlConcept | WeaklyEqualityComparableWith
template<class T >
_utlConcept | EqualityComparable = WeaklyEqualityComparableWith<T, T>
template<class T , class U >
_utlConcept | EqualityComparableWith
template<class T >
_utlConcept | StrictTotallyOrdered
template<class T , class U >
_utlConcept | StrictTotallyOrderedWith
template<class T >
_utlConcept | Semiregular = Copyable<T> && DefaultConstructible<T>
template<class T >
_utlConcept | Regular = Semiregular<T> && EqualityComparable<T>
template<class T >
_utlConcept | Scalar
template<class T >
_utlConcept | Arithmetic
template<class T >
_utlConcept | FloatingPoint
template<class F , class... Args>
_utlConcept | Invocable = is_invocable<F, Args...>::value
template<class F , class... Args>
_utlConcept | RegularInvocable = Invocable<F, Args...>
template<class F , class... Args>
_utlConcept | Predicate
template<class R , class T , class U >
_utlConcept | Relation
template<class R , class T , class U >
_utlConcept | StrictWeakOrder = Relation<R, T, U>
template<typename _Tp >
constexpr bool | Idx_dev = idx_dev_details::is_idx_dev_ <_Tp>::value
template<typename _Tp >
constexpr bool | In_dev = in_dev_details::is_in_dev_ <_Tp>::value
template<typename _Tp >
constexpr bool | Inbuf_dev = inbuf_dev_details::is_inbuf_dev_ <_Tp>::value
template<typename _Tp >
constexpr bool | Out_dev = out_dev_details::is_out_dev_<_Tp>::value
using | is_swappable = std::is_swappable
using | is_swappable_with = std::is_swappable_with
template<class T , class U >
_utlConcept | SwappableWith
template<class T >
_utlConcept | Swappable = is_swappable_with<T, T>::type::value

## Detailed Description

STL's core language concepts.

We provide std concepts in case host's stl does not provide them yet.

For more information

See also
  https://en.cppreference.com/w/cpp/concepts

## Typedef Documentation

## _ref_t

template<typename T >

using utl::_ref_t = typedef std::add_lvalue_reference_t<T>

Definition at line 48 of file stl.h.

## byte_t

using utl::byte_t = typedef uint8_t

8 bits wide

Definition at line 31 of file types.h.

## common_reference

template<typename... Ts>

using utl::common_reference = typedef common_impl::common_reference<Ts...>

Definition at line 281 of file stl.h.

## common_reference_t

template<typename... Ts>

using utl::common_reference_t = typedef meta::eval< common_reference<Ts...> >

Definition at line 286 of file stl.h.

## cref_

template<typename T >

using utl::cref_ = typedef const std::remove_reference_t<T>&

Definition at line 45 of file stl.h.

## dword_t

using utl::dword_t = typedef uint32_t

32 bits wide

Definition at line 33 of file types.h.

## index_t

using utl::index_t = typedef size_t

index_t and size_t mend to be interchangeable

Examples:
  W:/Work/Software/Libraries/utl/include/utl/meta/typelist.h.

Definition at line 38 of file types.h.

## invoke_result

template<typename _Callable , typename... _Args>

using utl::invoke_result = typedef detail::invoke_result_< is_invocable<_Callable, _Args...>::value, _Callable, _Args... >

invoke_result (for C++14)

Definition at line 174 of file invoke.h.

## invoke_result_t

template<typename _Callable , typename... _Args>

using utl::invoke_result_t = typedef meta::eval < invoke_result<_Callable, _Args...> >

invoke_result_t (for C++14)

Definition at line 180 of file invoke.h.

## is_swappable

using utl::is_swappable = typedef std::is_swappable

Swappable, SwappableWith

Definition at line 407 of file stl.h.

## is_swappable_with

using utl::is_swappable_with = typedef std::is_swappable_with

Definition at line 408 of file stl.h.

## ptrdiff_t

using utl::ptrdiff_t = typedef std::ptrdiff_t

Definition at line 40 of file types.h.

## remove_cvref_t

template<typename T >

using utl::remove_cvref_t = typedef std::remove_cv_t< std::remove_reference_t<T> >

Definition at line 42 of file stl.h.

## size_t

using utl::size_t = typedef std::size_t

Definition at line 37 of file types.h.

## use_if_same_t

template<typename _T1 , typename _T2 , typename _Ret = _T1>

using utl::use_if_same_t = typedef meta::eval< meta::enable_if< meta::same_<_T1, _T2>::value, _Ret > >

Definition at line 55 of file stl.h.

## word_t

using utl::word_t = typedef uint16_t

16 bits wide

Definition at line 32 of file types.h.

## Function Documentation

## get() [1/3]

template<size_t _Int, typename _Tp , size_t _Nm>

constexpr _Tp& utl::get | ( | array< _Tp, _Nm > & | arr | ) |

noexcept

Definition at line 220 of file array.h.

## get() [2/3]

template<size_t _Int, typename _Tp , size_t _Nm>

constexpr _Tp&& utl::get | ( | array< _Tp, _Nm > && | arr | ) |

noexcept

Definition at line 226 of file array.h.

## get() [3/3]

template<size_t _Int, typename _Tp , size_t _Nm>

constexpr const _Tp& utl::get | ( | const array< _Tp, _Nm > & | arr | ) |

noexcept

Definition at line 232 of file array.h.

## invoke()

template<typename _Callable , typename... _Args>

decltype(auto) utl::invoke | ( | _Callable && | fn,
|  | _Args &&... | args
| ) |  |

inline

Invoke a callable object (for C++14)

Definition at line 121 of file invoke.h.

## operator!=() [1/6]

template<typename _Tp , size_t _Nm>

bool utl::operator!= | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 186 of file array.h.

## operator!=() [2/6]

template<typename _Tp , size_t _Nm>

bool utl::operator!= | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 206 of file id.h.

## operator!=() [3/6]

template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >

bool utl::operator!= | ( | const istreamdev_it< _C1, _D1 > & | lhs,
|  | const istreamdev_it< _C2, _D2 > & | rhs
| ) |  |

inlinenoexcept

Definition at line 236 of file dev_iterators.h.

## operator!=() [4/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>

bool utl::operator!= | ( | const outdev_it< _Cont1, _It1, _beg1, _end1 > & | lhs,
|  | const outdev_it< _Cont2, _It2, _beg2, _end2 > & | rhs
| ) |  |

inlinenoexcept

Inequality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Parameters

  lhs | Left hand site iterator
  rhs | Right hand site iterator

Returns
  True in inequality

Definition at line 382 of file dev_iterators.h.

## operator!=() [5/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator!= | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 624 of file dev_iterators.h.

## operator!=() [6/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator!= | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 909 of file dev_iterators.h.

## operator+() [1/2]

template<typename _Cont , typename _It , index_t _beg, size_t _size>

indev_it<_Cont, _It, _beg, _size> utl::operator+ | ( | typename _Cont::difference_type | n,
|  | indev_it< _Cont, _It, _beg, _size > & | it
| ) |  |

inlinenoexcept

Definition at line 659 of file dev_iterators.h.

## operator+() [2/2]

template<typename _Cont , typename _It , index_t _beg, size_t _size>

iodev_it<_Cont, _It, _beg, _size> utl::operator+ | ( | typename _Cont::difference_type | n,
|  | iodev_it< _Cont, _It, _beg, _size > & | it
| ) |  |

inlinenoexcept

Definition at line 944 of file dev_iterators.h.

## operator-() [1/2]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

auto utl::operator- | ( | indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | indev_it< _Cont1, _It1, _beg1, _size1 > & | y
| ) |  | -> decltype (x.cursor() - y.cursor())

inlinenoexcept

Definition at line 651 of file dev_iterators.h.

## operator-() [2/2]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

auto utl::operator- | ( | iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | iodev_it< _Cont1, _It1, _beg1, _size1 > & | y
| ) |  | -> decltype (x.cursor() - y.cursor())

inlinenoexcept

Definition at line 936 of file dev_iterators.h.

## operator<() [1/4]

template<typename _Tp , size_t _Nm>

bool utl::operator< | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 191 of file array.h.

## operator<() [2/4]

template<typename _Tp , size_t _Nm>

bool utl::operator< | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 211 of file id.h.

## operator<() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator< | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Less than.

Definition at line 616 of file dev_iterators.h.

## operator<() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator< | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Less than.

Definition at line 901 of file dev_iterators.h.

## operator<=() [1/4]

template<typename _Tp , size_t _Nm>

bool utl::operator<= | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 201 of file array.h.

## operator<=() [2/4]

template<typename _Tp , size_t _Nm>

bool utl::operator<= | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 222 of file id.h.

## operator<=() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator<= | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 630 of file dev_iterators.h.

## operator<=() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator<= | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 915 of file dev_iterators.h.

## operator==() [1/6]

template<typename _Tp , size_t _Nm>

bool utl::operator== | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 181 of file array.h.

## operator==() [2/6]

template<typename _Tp , size_t _Nm>

bool utl::operator== | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 201 of file id.h.

## operator==() [3/6]

template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >

bool utl::operator== | ( | const istreamdev_it< _C1, _D1 > & | lhs,
|  | const istreamdev_it< _C2, _D2 > & | rhs
| ) |  |

inlinenoexcept

Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Parameters

  lhs | Left hand site iterator
  rhs | Right hand site iterator

Returns
  True in equality

Definition at line 229 of file dev_iterators.h.

## operator==() [4/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>

bool utl::operator== | ( | const outdev_it< _Cont1, _It1, _beg1, _end1 > & | lhs,
|  | const outdev_it< _Cont2, _It2, _beg2, _end2 > & | rhs
| ) |  |

inlinenoexcept

Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Note
  The following are not requirements for output iterator. We provide them nevertheless. Required: The rhs and lhs MUST belong to the same owner or the result is undefined.

Parameters

  lhs | Left hand site iterator
  rhs | Right hand site iterator

Returns
  True in equality

Definition at line 366 of file dev_iterators.h.

## operator==() [5/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator== | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Equality

Definition at line 608 of file dev_iterators.h.

## operator==() [6/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator== | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Equality

Definition at line 893 of file dev_iterators.h.

## operator>() [1/4]

template<typename _Tp , size_t _Nm>

bool utl::operator> | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 196 of file array.h.

## operator>() [2/4]

template<typename _Tp , size_t _Nm>

bool utl::operator> | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 217 of file id.h.

## operator>() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator> | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 636 of file dev_iterators.h.

## operator>() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator> | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 921 of file dev_iterators.h.

## operator>=() [1/4]

template<typename _Tp , size_t _Nm>

bool utl::operator>= | ( | const array< _Tp, _Nm > & | lhs,
|  | const array< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 207 of file array.h.

## operator>=() [2/4]

template<typename _Tp , size_t _Nm>

bool utl::operator>= | ( | const id_t< _Tp, _Nm > & | lhs,
|  | const id_t< _Tp, _Nm > & | rhs
| ) |  |

inline

Definition at line 227 of file id.h.

## operator>=() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator>= | ( | const indev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const indev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 642 of file dev_iterators.h.

## operator>=() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>

bool utl::operator>= | ( | const iodev_it< _Cont1, _It1, _beg1, _size1 > & | x,
|  | const iodev_it< _Cont2, _It2, _beg2, _size2 > & | y
| ) |  |

inlinenoexcept

Definition at line 927 of file dev_iterators.h.

## swap()

template<typename _Tp , size_t _Nm>

void utl::swap | ( | array< _Tp, _Nm > & | lhs,
|  | array< _Tp, _Nm > & | rhs
| ) |  |

inlinenoexcept

Definition at line 214 of file array.h.

## Variable Documentation

## Arithmetic

template<class T >

_utlConcept utl::Arithmetic

Initial value:
=
std::is_arithmetic<T>::value && Scalar<T> && StrictTotallyOrdered<T>

Arithmetic

Definition at line 736 of file stl.h.

## Assignable

template<class LHS , class RHS >

_utlConcept utl::Assignable

Initial value:
=
std::is_assignable<LHS, RHS>::value

Assignable

Note
  != std:: on CommonReference

Definition at line 366 of file stl.h.

## Boolean

template<class B >

_utlConcept utl::Boolean

Initial value:
=
Movable<remove_cvref_t<B>> &&
ConvertibleTo<const _ref_t<B>, bool> &&
Same<meta::true_, details::is_boolean_t<B>>

Definition at line 551 of file stl.h.

## Common

template<class T , class U >

_utlConcept utl::Common

Initial value:
=
Same<std::common_type_t<T, U>, std::common_type_t<U, T>>

Definition at line 301 of file stl.h.

## CommonReference

template<class T , class U >

_utlConcept utl::CommonReference

Initial value:
=
Same<common_reference_t<T, U>, common_reference_t<U, T>> &&
ConvertibleTo<T, common_reference_t<T, U>> &&
ConvertibleTo<U, common_reference_t<T, U>>

Definition at line 293 of file stl.h.

## Constructible

template<class T , class... Args>

_utlConcept utl::Constructible

Initial value:
=
Destructible<T> && std::is_constructible<T, Args...>::value

Constructible

Definition at line 438 of file stl.h.

## ConvertibleTo

template<class From , class To >

_utlConcept utl::ConvertibleTo = std::is_convertible<From, To>::value

ConvertibleTo

Definition at line 87 of file stl.h.

## Copyable

template<class T >

_utlConcept utl::Copyable

Initial value:
=
CopyConstructible<T> &&
Movable<T> &&
Assignable<_ref_t<T>, const _ref_t<T>>

Copyable

Definition at line 480 of file stl.h.

## CopyAssignable

template<typename T >

_utlConcept utl::CopyAssignable = std::is_copy_assignable<T>::value

Definition at line 359 of file stl.h.

## CopyConstructible

template<class T >

_utlConcept utl::CopyConstructible

Initial value:
=
MoveConstructible<T> &&
Constructible<T, _ref_t<T>> && ConvertibleTo<_ref_t<T>, T> &&
Constructible<T, const _ref_t<T>> && ConvertibleTo<const _ref_t<T>, T> &&
Constructible<T, const T> && ConvertibleTo<const T, T>

CopyConstructible

Definition at line 459 of file stl.h.

## DefaultConstructible

template<class T >

_utlConcept utl::DefaultConstructible = Constructible<T>

DefaultConstructible

Definition at line 444 of file stl.h.

## DerivedFrom

template<class Derived , class Base >

_utlConcept utl::DerivedFrom

Initial value:
=
std::is_base_of<Base, Derived>::value &&
std::is_convertible<const volatile Derived*, const volatile Base*>::value

DerivedFrom

Definition at line 71 of file stl.h.

## Destructible

template<class T >

_utlConcept utl::Destructible = std::is_nothrow_destructible<T>::value

Destructible

Definition at line 432 of file stl.h.

## EqualityComparable

template<class T >

_utlConcept utl::EqualityComparable = WeaklyEqualityComparableWith<T, T>

Definition at line 596 of file stl.h.

## EqualityComparableWith

template<class T , class U >

_utlConcept utl::EqualityComparableWith

Initial value:
=
EqualityComparable<T> &&
EqualityComparable<U> &&
WeaklyEqualityComparableWith<T, U>

Definition at line 599 of file stl.h.

## FloatingPoint

template<class T >

_utlConcept utl::FloatingPoint

Initial value:
=
std::is_floating_point<T>::value && Arithmetic<T>

FloatingPoint

Definition at line 743 of file stl.h.

## Idx_dev

template<typename _Tp >

constexpr bool utl::Idx_dev = idx_dev_details::is_idx_dev_ <_Tp>::value

Predicate for input device checking

Parameters

  _Tp | Type to check

Returns
  True if _Tp is a input device

Definition at line 523 of file idx_dev.h.

## In_dev

template<typename _Tp >

constexpr bool utl::In_dev = in_dev_details::is_in_dev_ <_Tp>::value

Predicate for input device checking

Parameters

  _Tp | Type to check

Returns
  True if _Tp is a input device

Definition at line 335 of file in_dev.h.

## Inbuf_dev

template<typename _Tp >

constexpr bool utl::Inbuf_dev = inbuf_dev_details::is_inbuf_dev_ <_Tp>::value

Predicate for input device checking

Parameters

  _Tp | Type to check

Returns
  True if _Tp is a input device

Definition at line 380 of file inbuf_dev.h.

## Integral

template<class T >

_utlConcept utl::Integral = std::is_integral<T>::value

Integral

Definition at line 340 of file stl.h.

## Invocable

template<class F , class... Args>

_utlConcept utl::Invocable = is_invocable<F, Args...>::value

Invocable

Definition at line 750 of file stl.h.

## Movable

template<class T >

_utlConcept utl::Movable

Initial value:
=
std::is_object<T>::value &&
MoveConstructible<T> &&
Assignable<_ref_t<T>, T> &&
Swappable<T>

Movable

Definition at line 469 of file stl.h.

## MoveAssignable

template<typename T >

_utlConcept utl::MoveAssignable = std::is_move_assignable<T>::value

Definition at line 356 of file stl.h.

## MoveConstructible

template<class T >

_utlConcept utl::MoveConstructible

Initial value:
=
Constructible<T, T> && ConvertibleTo<T, T>

MoveConstructible

Note
  Another approach would be std::is_move_constructible<T>::value;

Definition at line 452 of file stl.h.

## Out_dev

template<typename _Tp >

constexpr bool utl::Out_dev = out_dev_details::is_out_dev_<_Tp>::value

Predicate for output device checking

Parameters

  _Tp | Type to check

Returns
  True if _Tp is a output device

Definition at line 357 of file out_dev.h.

## Predicate

template<class F , class... Args>

_utlConcept utl::Predicate

Initial value:
=
RegularInvocable<F, Args...> &&
Boolean<invoke_result_t<F, Args...>>
utl::RegularInvocable
_utlConcept RegularInvocable
Definition: stl.h:756
utl::invoke_result_t
meta::eval< invoke_result< _Callable, _Args... > > invoke_result_t
invoke_result_t (for C++14)
Definition: invoke.h:180
utl::Boolean
_utlConcept Boolean
Definition: stl.h:551

Definition at line 759 of file stl.h.

## Regular

template<class T >

_utlConcept utl::Regular = Semiregular<T> && EqualityComparable<T>

Regular

Definition at line 723 of file stl.h.

## RegularInvocable

template<class F , class... Args>

_utlConcept utl::RegularInvocable = Invocable<F, Args...>

Definition at line 756 of file stl.h.

## Relation

template<class R , class T , class U >

_utlConcept utl::Relation

Initial value:
=
Predicate<R, T, T> && Predicate<R, U, U> &&
Predicate<R, T, U> && Predicate<R, U, T>

Definition at line 764 of file stl.h.

## Same

template<class T , class U >

_utlConcept utl::Same = meta::same_<T, U>::value

Same

Definition at line 62 of file stl.h.

## Scalar

template<class T >

_utlConcept utl::Scalar

Initial value:
=
std::is_scalar<T>::value && Regular<T>

Scalar

Definition at line 729 of file stl.h.

## Semiregular

template<class T >

_utlConcept utl::Semiregular = Copyable<T> && DefaultConstructible<T>

Semiregular

Definition at line 717 of file stl.h.

## SignedIntegral

template<class T >

_utlConcept utl::SignedIntegral = Integral<T> && std::is_signed<T>::value

Signed Integral

Definition at line 346 of file stl.h.

## StrictTotallyOrdered

template<class T >

_utlConcept utl::StrictTotallyOrdered

Initial value:
=
EqualityComparable<T> &&
Same <meta::true_, details::is_strict_totally_ordered_t<T>>

Definition at line 647 of file stl.h.

## StrictTotallyOrderedWith

template<class T , class U >

_utlConcept utl::StrictTotallyOrderedWith

Initial value:
=
StrictTotallyOrdered<T> &&
StrictTotallyOrdered<U> &&
EqualityComparableWith<T, U> &&
Same <meta::true_, details::is_strict_totally_ordered_with_t<T, U>>

Definition at line 706 of file stl.h.

## StrictWeakOrder

template<class R , class T , class U >

_utlConcept utl::StrictWeakOrder = Relation<R, T, U>

Definition at line 769 of file stl.h.

## Swappable

template<class T >

_utlConcept utl::Swappable = is_swappable_with<T, T>::type::value

Definition at line 425 of file stl.h.

## SwappableWith

template<class T , class U >

_utlConcept utl::SwappableWith

Initial value:
=
is_swappable_with<T, T>::type::value &&
is_swappable_with<U, U>::type::value &&
is_swappable_with<T, U>::type::value &&
is_swappable_with<U, T>::type::value

Definition at line 413 of file stl.h.

## UnsignedIntegral

template<class T >

_utlConcept utl::UnsignedIntegral = Integral<T> && !std::is_signed<T>::value

Unsigned Integral

Definition at line 352 of file stl.h.

## WeaklyEqualityComparableWith

template<class T , class U >

_utlConcept utl::WeaklyEqualityComparableWith

Initial value:
=
Same<meta::true_, details::is_weakly_equality_comparable_with_t<T, U>>

Definition at line 582 of file stl.h.

## WeaklyIncrementable

template<class I >

_utlConcept utl::WeaklyIncrementable

Initial value:
=
Semiregular<I>
&& Same<_ref_t<I>, meta::detected_t<detail::try_ppI, _ref_t<I>>>
&& meta::is_detected<detail::try_Ipp, _ref_t<I>>::value

Definition at line 49 of file iterators.h.