Horizon
Classes | Macros | Typedefs | Functions | Variables
concepts.hpp File Reference
#include <initializer_list>
#include <utility>
#include <type_traits>
#include <concepts/swap.hpp>
#include <concepts/type_traits.hpp>

Go to the source code of this file.

Classes

struct  concepts::return_t_< typename >
 

Macros

#define CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN
 
#define CPP_PP_IGNORE_CXX2A_COMPAT_END
 
#define CPP_CXX_CONCEPTS   0L
 
#define CPP_PP_CAT_(X, ...)   X ## __VA_ARGS__
 
#define CPP_PP_CAT(X, ...)   CPP_PP_CAT_(X, __VA_ARGS__)
 
#define CPP_PP_EVAL_(X, ARGS)   X ARGS
 
#define CPP_PP_EVAL(X, ...)   CPP_PP_EVAL_(X, (__VA_ARGS__))
 
#define CPP_PP_EVAL2_(X, ARGS)   X ARGS
 
#define CPP_PP_EVAL2(X, ...)   CPP_PP_EVAL2_(X, (__VA_ARGS__))
 
#define CPP_PP_EXPAND(...)   __VA_ARGS__
 
#define CPP_PP_EAT(...)
 
#define CPP_PP_FIRST(LIST)   CPP_PP_FIRST_ LIST
 
#define CPP_PP_FIRST_(...)   __VA_ARGS__ CPP_PP_EAT
 
#define CPP_PP_SECOND(LIST)   CPP_PP_SECOND_ LIST
 
#define CPP_PP_SECOND_(...)   CPP_PP_EXPAND
 
#define CPP_PP_CHECK(...)   CPP_PP_EXPAND(CPP_PP_CHECK_N(__VA_ARGS__, 0,))
 
#define CPP_PP_CHECK_N(x, n, ...)   n
 
#define CPP_PP_PROBE(x)   x, 1,
 
#define CPP_PP_PROBE_N(x, n)   x, n,
 
#define CPP_PP_IS_PAREN(x)   CPP_PP_CHECK(CPP_PP_IS_PAREN_PROBE x)
 
#define CPP_PP_IS_PAREN_PROBE(...)   CPP_PP_PROBE(~)
 
#define CPP_CXX_VA_OPT   0
 
#define CPP_PP_COUNT(...)
 
#define CPP_PP_COUNT_( _01, _02, _03, _04, _05, _06, _07, _08, _09, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, N, ...)    N
 
#define CPP_PP_IIF(BIT)   CPP_PP_CAT_(CPP_PP_IIF_, BIT)
 
#define CPP_PP_IIF_0(TRUE, ...)   __VA_ARGS__
 
#define CPP_PP_IIF_1(TRUE, ...)   TRUE
 
#define CPP_PP_LPAREN   (
 
#define CPP_PP_RPAREN   )
 
#define CPP_PP_NOT(BIT)   CPP_PP_CAT_(CPP_PP_NOT_, BIT)
 
#define CPP_PP_NOT_0   1
 
#define CPP_PP_NOT_1   0
 
#define CPP_PP_EMPTY()
 
#define CPP_PP_COMMA()   ,
 
#define CPP_PP_LBRACE()   {
 
#define CPP_PP_RBRACE()   }
 
#define CPP_PP_COMMA_IIF(X)    CPP_PP_IIF(X)(CPP_PP_EMPTY, CPP_PP_COMMA)()
 
#define CPP_PP_FOR_EACH(M, ...)    CPP_PP_FOR_EACH_N(CPP_PP_COUNT(__VA_ARGS__), M, __VA_ARGS__)
 
#define CPP_PP_FOR_EACH_N(N, M, ...)    CPP_PP_CAT(CPP_PP_FOR_EACH_, N)(M, __VA_ARGS__)
 
#define CPP_PP_FOR_EACH_1(M, _1)    M(_1)
 
#define CPP_PP_FOR_EACH_2(M, _1, _2)    M(_1), M(_2)
 
#define CPP_PP_FOR_EACH_3(M, _1, _2, _3)    M(_1), M(_2), M(_3)
 
#define CPP_PP_FOR_EACH_4(M, _1, _2, _3, _4)    M(_1), M(_2), M(_3), M(_4)
 
#define CPP_PP_FOR_EACH_5(M, _1, _2, _3, _4, _5)    M(_1), M(_2), M(_3), M(_4), M(_5)
 
#define CPP_PP_FOR_EACH_6(M, _1, _2, _3, _4, _5, _6)    M(_1), M(_2), M(_3), M(_4), M(_5), M(_6)
 
#define CPP_PP_FOR_EACH_7(M, _1, _2, _3, _4, _5, _6, _7)    M(_1), M(_2), M(_3), M(_4), M(_5), M(_6), M(_7)
 
#define CPP_PP_FOR_EACH_8(M, _1, _2, _3, _4, _5, _6, _7, _8)    M(_1), M(_2), M(_3), M(_4), M(_5), M(_6), M(_7), M(_8)
 
#define CPP_PP_PROBE_EMPTY_PROBE_CPP_PP_PROBE_EMPTY    CPP_PP_PROBE(~)
 
#define CPP_PP_PROBE_EMPTY()
 
#define CPP_PP_IS_NOT_EMPTY(...)
 
#define CPP_BOOL(...)   __VA_ARGS__
 
#define CPP_TRUE_FN   CPP_true_fn(::concepts::detail::xNil{})
 
#define CPP_NOT(...)   (!(__VA_ARGS__))
 
#define CPP_assert(...)
 
#define CPP_assert_msg   static_assert
 
#define CPP_concept   CPP_INLINE_VAR constexpr bool
 
#define CPP_and   CPP_and_sfinae
 
#define CPP_template   CPP_template_sfinae
 
#define CPP_template_def   CPP_template_def_sfinae
 
#define CPP_member   CPP_member_sfinae
 
#define CPP_auto_member   CPP_member_sfinae
 
#define CPP_ctor   CPP_ctor_sfinae
 
#define CPP_concept_ref(NAME, ...)
 
#define CPP_TEMPLATE_AUX_   CPP_TEMPLATE_SFINAE_AUX_
 INTERNAL ONLY.
 
#define CPP_template_sfinae(...)
 
#define CPP_TEMPLATE_SFINAE_PROBE_CONCEPT_concept    CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_WHICH_(FIRST, ...)
 INTERNAL ONLY. More...
 
#define CPP_TEMPLATE_SFINAE_AUX_(...)
 INTERNAL ONLY. More...
 
#define CPP_TEMPLATE_SFINAE_AUX_0(...)
 INTERNAL ONLY. More...
 
#define CPP_TEMPLATE_SFINAE_AUX_1(DECL, ...)
 INTERNAL ONLY. More...
 
#define CPP_CONCEPT_NAME_(DECL)
 INTERNAL ONLY. More...
 
#define CPP_CONCEPT_PARAMS_(DECL)    CPP_PP_EVAL(CPP_PP_SECOND, CPP_EAT_CONCEPT_(DECL))
 INTERNAL ONLY.
 
#define CPP_EAT_CONCEPT_(DECL)    CPP_PP_CAT(CPP_EAT_CONCEPT_, DECL)
 INTERNAL ONLY.
 
#define CPP_EAT_CONCEPT_concept
 INTERNAL ONLY.
 
#define CPP_and_sfinae    && CPP_BOOL(CPP_true), int> = 0, std::enable_if_t<
 INTERNAL ONLY.
 
#define CPP_template_def_sfinae(...)    template<__VA_ARGS__ CPP_TEMPLATE_DEF_SFINAE_AUX_
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_DEF_SFINAE_AUX_(...)
 INTERNAL ONLY. More...
 
#define CPP_and_sfinae_def    && CPP_BOOL(CPP_true), int>, std::enable_if_t<
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_3_requires
 INTERNAL ONLY.
 
#define CPP_member_sfinae    CPP_broken_friend_member
 INTERNAL ONLY.
 
#define CPP_ctor_sfinae(TYPE)
 INTERNAL ONLY. More...
 
#define CPP_CTOR_SFINAE_IMPL_1_(...)
 INTERNAL ONLY. More...
 
#define CPP_CTOR_SFINAE_PROBE_NOEXCEPT_noexcept    CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_MAKE_PROBE(FIRST, ...)    CPP_PP_CAT(CPP_CTOR_SFINAE_PROBE_NOEXCEPT_, FIRST)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_REQUIRES(...)
 INTERNAL ONLY. More...
 
#define CPP_CTOR_SFINAE_REQUIRES_0(...)
 INTERNAL ONLY. More...
 
#define CPP_CTOR_SFINAE_REQUIRES_1(...)
 INTERNAL ONLY. More...
 
#define CPP_CTOR_SFINAE_EAT_NOEXCEPT_noexcept(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_SHOW_NOEXCEPT_noexcept(...)
 INTERNAL ONLY. More...
 
#define CPP_broken_friend_ret(...)
 
#define CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_(...)
 INTERNAL ONLY. More...
 
#define CPP_TEMPLATE_AUX_2_requires
 INTERNAL ONLY.
 
#define CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_3_(...)    (__VA_ARGS__ && CPP_TRUE_FN)>>
 INTERNAL ONLY.
 
#define CPP_broken_friend_member
 INTERNAL ONLY. More...
 
#define CPP_requires(NAME, REQS)
 
#define CPP_requires_ref(NAME, ...)
 
#define CPP_REQUIRES_requires(...)    (__VA_ARGS__) -> decltype CPP_REQUIRES_RETURN_
 INTERNAL ONLY.
 
#define CPP_REQUIRES_RETURN_(...)   (__VA_ARGS__, void()) {}
 INTERNAL ONLY.
 
#define CPP_REQUIRES_AUX_(NAME, ...)
 INTERNAL ONLY. More...
 
#define CPP_ret    CPP_broken_friend_ret
 
#define CPP_FUN_IMPL_1_(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_REQUIRES(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_CONST_(MAYBE_CONST, ...)
 INTERNAL ONLY. More...
 
#define CPP_PP_PROBE_CONST_PROBE_const   CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_FUN_IMPL_SELECT_CONST_1(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_(MAYBE_NOEXCEPT, ...)
 INTERNAL ONLY. More...
 
#define CPP_PP_PROBE_NOEXCEPT_PROBE_noexcept   CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_0(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_1(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_EAT_NOEXCEPT_noexcept(...)
 INTERNAL ONLY.
 
#define CPP_FUN_IMPL_SHOW_NOEXCEPT_noexcept(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_CONST_0(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_(MAYBE_NOEXCEPT, ...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_0(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_1(...)
 INTERNAL ONLY. More...
 
#define CPP_FUN_IMPL_EAT_CONST_const
 INTERNAL ONLY.
 
#define CPP_FUN_IMPL_EAT_REQUIRES_requires
 INTERNAL ONLY.
 
#define CPP_fun(X)   CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN X CPP_FUN_IMPL_1_
 
#define CPP_auto_fun(X)   X CPP_AUTO_FUN_IMPL_
 
#define CPP_AUTO_FUN_IMPL_(...)   (__VA_ARGS__) CPP_AUTO_FUN_RETURNS_
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_(...)
 INTERNAL ONLY. More...
 
#define CPP_AUTO_FUN_SELECT_RETURNS_(MAYBE_CONST, ...)
 INTERNAL ONLY. More...
 
#define CPP_PP_PROBE_CONST_MUTABLE_PROBE_const   CPP_PP_PROBE_N(~, 1)
 INTERNAL ONLY.
 
#define CPP_PP_PROBE_CONST_MUTABLE_PROBE_mutable   CPP_PP_PROBE_N(~, 2)
 INTERNAL ONLY.
 
#define CPP_PP_EAT_MUTABLE_mutable
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_2(...)    CPP_PP_CAT(CPP_PP_EAT_MUTABLE_, __VA_ARGS__) CPP_AUTO_FUN_RETURNS_CONST_0
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_1(...)    __VA_ARGS__ CPP_AUTO_FUN_RETURNS_CONST_0
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_0(...)
 INTERNAL ONLY. More...
 
#define CPP_AUTO_FUN_RETURNS_return
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_(...)
 INTERNAL ONLY. More...
 

Typedefs

template<bool B>
using concepts::bool_ = std::integral_constant< bool, B >
 
template<typename T , typename EnableIf >
using concepts::return_t = meta::invoke< return_t_< EnableIf >, T >
 

Functions

template<typename From , typename To >
 concepts::CPP_requires (explicitly_convertible_to_, requires(From(*from)())(static_cast< To >(from())))
 \concept explicitly_convertible_to_ More...
 
 concepts::CPP_template (typename T, typename U)(concept(derived_from_)(T
 \concept derived_from_ More...
 
 concepts::CPP_template (typename T, typename U)(concept(common_reference_with_)(T
 \concept common_reference_with_ More...
 
 concepts::CPP_template (typename T, typename U)(concept(common_with_)(T
 \concept common_with_ More...
 
template<typename T , typename U >
 concepts::CPP_requires (assignable_from_, requires(T t, U &&u)(t=(U &&) u, requires_< same_as< T, decltype(t=(U &&) u)>>))
 \concept assignable_from_ More...
 
template<typename T >
 concepts::CPP_requires (swappable_, requires(T &t, T &u)(concepts::swap(t, u)))
 \concept swappable_ More...
 
template<typename T , typename U >
 concepts::CPP_requires (swappable_with_, requires(T &&t, U &&u)(concepts::swap((T &&) t,(T &&) t), concepts::swap((U &&) u,(U &&) u), concepts::swap((U &&) u,(T &&) t), concepts::swap((T &&) t,(U &&) u)))
 \concept swappable_with_ More...
 
template<typename T >
 concepts::detail::CPP_requires (boolean_testable_frag_, requires(T &&t)(!(T &&) t, concepts::requires_< boolean_testable_impl_< decltype(!(T &&) t)>>))
 \concept boolean_testable_frag_ More...
 
template<typename T , typename U >
CPP_DIAGNOSTIC_PUSH CPP_DIAGNOSTIC_IGNORE_FLOAT_EQUAL concepts::detail::CPP_requires (weakly_equality_comparable_with_frag_, requires(detail::as_cref_t< T > t, detail::as_cref_t< U > u)(concepts::requires_< boolean_testable_< decltype(t==u)>>, concepts::requires_< boolean_testable_< decltype(t !=u)>>, concepts::requires_< boolean_testable_< decltype(u==t)>>, concepts::requires_< boolean_testable_< decltype(u !=t)>>))
 \concept weakly_equality_comparable_with_frag_ More...
 
template<typename T , typename U >
 concepts::detail::CPP_requires (partially_ordered_with_frag_, requires(detail::as_cref_t< T > &t, detail::as_cref_t< U > &u)(concepts::requires_< boolean_testable_< decltype(t< u)>>, concepts::requires_< boolean_testable_< decltype(t > u)>>, concepts::requires_< boolean_testable_< decltype(t<=u)>>, concepts::requires_< boolean_testable_< decltype(t >=u)>>, concepts::requires_< boolean_testable_< decltype(u< t)>>, concepts::requires_< boolean_testable_< decltype(u > t)>>, concepts::requires_< boolean_testable_< decltype(u<=t)>>, concepts::requires_< boolean_testable_< decltype(u >=t)>>))
 \concept partially_ordered_with_frag_ More...
 
 concepts::CPP_template (typename T, typename U)(concept(equality_comparable_with_)(T
 \concept equality_comparable_with_ More...
 
 concepts::CPP_template (typename T, typename U)(concept(totally_ordered_with_)(T
 \concept totally_ordered_with_ More...
 
 concepts::CPP_template (typename T)(concept(copy_constructible_)(T)
 \concept copy_constructible_ More...
 
 concepts::CPP_template (typename T)(concept(move_assignable_)(T)
 \concept move_assignable_ More...
 
 concepts::CPP_template (typename T)(concept(copy_assignable_)(T)
 \concept copy_assignable_ More...
 

Variables

template<bool... Bs>
constexpr CPP_INLINE_VAR bool concepts::and_v
 
template<bool... Bs>
constexpr CPP_INLINE_VAR bool concepts::or_v
 
template<bool B>
constexpr CPP_INLINE_VAR std::enable_if_t< B, int > concepts::requires_ = 0
 
template<bool B>
CPP_concept concepts::is_true = B
 \concept is_true More...
 
template<typename... Args>
CPP_concept concepts::type = true
 \concept type More...
 
template<class T , template< typename... > class Trait, typename... Args>
CPP_concept concepts::satisfies
 \concept satisfies More...
 
template<typename A , typename B >
CPP_concept concepts::same_as
 \concept same_as More...
 
template<typename From , typename To >
CPP_concept concepts::implicitly_convertible_to
 \concept implicitly_convertible_to More...
 
template<typename From , typename To >
CPP_concept concepts::explicitly_convertible_to
 \concept explicitly_convertible_to More...
 
template<typename From , typename To >
CPP_concept concepts::convertible_to
 \concept convertible_to More...
 
 concepts::U
 
convertible_to< T const volatile *, U const volatile * > concepts::convertible_to< T const volatile *, U const volatile * >
 
template<typename T , typename U >
CPP_concept concepts::derived_from
 \concept derived_from More...
 
 concepts::U
 
same_as< common_reference_t< T, U >, common_reference_t< U, T > > CPP_and convertible_to< T, common_reference_t< T, U > > CPP_and concepts::convertible_to< U, common_reference_t< T, U > >
 
template<typename T , typename U >
CPP_concept concepts::common_reference_with
 \concept common_reference_with More...
 
 concepts::U
 
template<typename T , typename U >
CPP_concept concepts::common_with
 \concept common_with More...
 
template<typename T >
CPP_concept concepts::integral
 \concept integral More...
 
template<typename T >
CPP_concept concepts::signed_integral
 \concept signed_integral More...
 
template<typename T >
CPP_concept concepts::unsigned_integral
 \concept unsigned_integral More...
 
template<typename T , typename U >
CPP_concept concepts::assignable_from
 \concept assignable_from More...
 
template<typename T >
CPP_concept concepts::swappable
 \concept swappable More...
 
template<typename T , typename U >
CPP_concept concepts::swappable_with
 \concept swappable_with More...
 
template<typename T >
CPP_concept concepts::detail::boolean_testable_impl_ = convertible_to<T, bool>
 \concept boolean_testable_impl_ More...
 
template<typename T >
CPP_concept concepts::detail::boolean_testable_
 \concept boolean_testable_ More...
 
template<typename T , typename U >
CPP_concept concepts::detail::weakly_equality_comparable_with_
 \concept weakly_equality_comparable_with_ More...
 
template<typename T , typename U >
CPP_concept concepts::detail::partially_ordered_with_
 \concept partially_ordered_with_ More...
 
template<typename T >
CPP_concept concepts::equality_comparable
 \concept equality_comparable More...
 
 concepts::U
 
template<typename T , typename U >
CPP_concept concepts::equality_comparable_with
 \concept equality_comparable_with More...
 
template<typename T >
CPP_concept concepts::totally_ordered
 \concept totally_ordered More...
 
 concepts::U
 
template<typename T , typename U >
CPP_concept concepts::totally_ordered_with
 \concept totally_ordered_with More...
 
template<typename T >
CPP_concept concepts::destructible
 \concept destructible More...
 
template<typename T , typename... Args>
CPP_concept concepts::constructible_from
 \concept constructible_from More...
 
template<typename T >
CPP_concept concepts::default_constructible
 \concept default_constructible More...
 
template<typename T >
CPP_concept concepts::move_constructible
 \concept move_constructible More...
 
constructible_from< T, T & > &&constructible_from< T, T const & > &&constructible_from< T, T const > &&convertible_to< T &, T > &&convertible_to< T const &, T > && concepts::convertible_to< T const, T >
 
template<typename T >
CPP_concept concepts::copy_constructible
 \concept copy_constructible More...
 
assignable_from< T &, T > concepts::assignable_from< T &, T >
 
template<typename T >
CPP_concept concepts::movable
 \concept movable More...
 
assignable_from< T &, T const & > concepts::assignable_from< T &, T const & >
 
template<typename T >
CPP_concept concepts::copyable
 \concept copyable More...
 
template<typename T >
CPP_concept concepts::semiregular
 \concept semiregular More...
 
template<typename T >
CPP_concept concepts::regular
 \concept regular More...
 

Macro Definition Documentation

◆ CPP_assert

#define CPP_assert (   ...)
Value:
static_assert(static_cast<bool>(__VA_ARGS__), \
"Concept assertion failed : " #__VA_ARGS__)

◆ CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_

#define CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_ (   ...)
Value:
noexcept(noexcept(decltype(__VA_ARGS__)(__VA_ARGS__))) -> \
decltype(__VA_ARGS__) \
{ return (__VA_ARGS__); }

INTERNAL ONLY.

◆ CPP_AUTO_FUN_RETURNS_

#define CPP_AUTO_FUN_RETURNS_ (   ...)
Value:
CPP_PP_EVAL2_( \
(__VA_ARGS__,) \
)(__VA_ARGS__)
#define CPP_AUTO_FUN_SELECT_RETURNS_(MAYBE_CONST,...)
INTERNAL ONLY.
Definition: concepts.hpp:666

INTERNAL ONLY.

◆ CPP_AUTO_FUN_RETURNS_CONST_0

#define CPP_AUTO_FUN_RETURNS_CONST_0 (   ...)
Value:
CPP_PP_CAT(CPP_AUTO_FUN_RETURNS_, __VA_ARGS__))
#define CPP_AUTO_FUN_RETURNS_(...)
INTERNAL ONLY.
Definition: concepts.hpp:659
#define CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_(...)
INTERNAL ONLY.
Definition: concepts.hpp:704

INTERNAL ONLY.

◆ CPP_AUTO_FUN_SELECT_RETURNS_

#define CPP_AUTO_FUN_SELECT_RETURNS_ (   MAYBE_CONST,
  ... 
)
Value:
CPP_PP_CAT(CPP_AUTO_FUN_RETURNS_CONST_, \
CPP_PP_EVAL(CPP_PP_CHECK, CPP_PP_CAT( \
CPP_PP_PROBE_CONST_MUTABLE_PROBE_, MAYBE_CONST)))

INTERNAL ONLY.

◆ CPP_broken_friend_member

#define CPP_broken_friend_member
Value:
template<bool (&CPP_true_fn)(::concepts::detail::xNil) = \
::concepts::detail::CPP_true_fn>

INTERNAL ONLY.

◆ CPP_broken_friend_ret

#define CPP_broken_friend_ret (   ...)
Value:
::concepts::return_t< \
__VA_ARGS__, \
#define CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_(...)
INTERNAL ONLY.
Definition: concepts.hpp:428

◆ CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_

#define CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_ (   ...)
Value:
CPP_TEMPLATE_AUX_2_, __VA_ARGS__))
#define CPP_BROKEN_FRIEND_RETURN_TYPE_AUX_3_(...)
INTERNAL ONLY.
Definition: concepts.hpp:436

INTERNAL ONLY.

◆ CPP_CONCEPT_NAME_

#define CPP_CONCEPT_NAME_ (   DECL)
Value:
CPP_PP_EVAL( \
CPP_PP_CAT, \
CPP_PP_EVAL(CPP_PP_FIRST, CPP_EAT_CONCEPT_(DECL)), concept_)
#define CPP_EAT_CONCEPT_(DECL)
INTERNAL ONLY.
Definition: concepts.hpp:326

INTERNAL ONLY.

◆ CPP_concept_ref

#define CPP_concept_ref (   NAME,
  ... 
)
Value:
(1u == sizeof(CPP_PP_CAT(NAME, concept_)( \
(::concepts::detail::tag<__VA_ARGS__>*)nullptr)))

◆ CPP_ctor_sfinae

#define CPP_ctor_sfinae (   TYPE)
Value:
CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN \
#define CPP_CTOR_SFINAE_IMPL_1_(...)
INTERNAL ONLY.
Definition: concepts.hpp:365

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_IMPL_1_

#define CPP_CTOR_SFINAE_IMPL_1_ (   ...)
Value:
(__VA_ARGS__ \
CPP_PP_COMMA_IIF( \
CPP_PP_NOT(CPP_PP_IS_NOT_EMPTY(__VA_ARGS__))) \
CPP_CTOR_SFINAE_REQUIRES

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_REQUIRES

#define CPP_CTOR_SFINAE_REQUIRES (   ...)
Value:
CPP_PP_CAT( \
CPP_CTOR_SFINAE_REQUIRES_, \
CPP_PP_EVAL( \
CPP_PP_CHECK, \
CPP_CTOR_SFINAE_MAKE_PROBE(__VA_ARGS__,)))(__VA_ARGS__)
#define CPP_CTOR_SFINAE_MAKE_PROBE(FIRST,...)
INTERNAL ONLY.
Definition: concepts.hpp:376

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_REQUIRES_0

#define CPP_CTOR_SFINAE_REQUIRES_0 (   ...)
Value:
std::enable_if_t< \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__) && CPP_TRUE_FN, \
::concepts::detail::Nil \
> = {}) \
CPP_PP_IGNORE_CXX2A_COMPAT_END

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_REQUIRES_1

#define CPP_CTOR_SFINAE_REQUIRES_1 (   ...)
Value:
std::enable_if_t< \
CPP_PP_EVAL(CPP_PP_CAT, \
CPP_TEMPLATE_SFINAE_AUX_3_, \
CPP_PP_CAT(CPP_CTOR_SFINAE_EAT_NOEXCEPT_, __VA_ARGS__)) && CPP_TRUE_FN,\
::concepts::detail::Nil \
> = {}) \
CPP_PP_EXPAND(CPP_PP_CAT(CPP_CTOR_SFINAE_SHOW_NOEXCEPT_, __VA_ARGS__)))

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_SHOW_NOEXCEPT_noexcept

#define CPP_CTOR_SFINAE_SHOW_NOEXCEPT_noexcept (   ...)
Value:
noexcept(__VA_ARGS__) \
CPP_PP_IGNORE_CXX2A_COMPAT_END \
CPP_PP_EAT CPP_PP_LPAREN

INTERNAL ONLY.

◆ CPP_FUN_IMPL_1_

#define CPP_FUN_IMPL_1_ (   ...)
Value:
(__VA_ARGS__ \
CPP_PP_COMMA_IIF( \
CPP_PP_NOT(CPP_PP_IS_NOT_EMPTY(__VA_ARGS__))) \
CPP_FUN_IMPL_REQUIRES

INTERNAL ONLY.

◆ CPP_FUN_IMPL_REQUIRES

#define CPP_FUN_IMPL_REQUIRES (   ...)
Value:
CPP_PP_EVAL2_( \
(__VA_ARGS__,) \
)(__VA_ARGS__)
#define CPP_FUN_IMPL_SELECT_CONST_(MAYBE_CONST,...)
INTERNAL ONLY.
Definition: concepts.hpp:539

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_

#define CPP_FUN_IMPL_SELECT_CONST_ (   MAYBE_CONST,
  ... 
)
Value:
CPP_PP_EVAL(CPP_PP_CHECK, CPP_PP_CAT( \
CPP_PP_PROBE_CONST_PROBE_, MAYBE_CONST)))

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_0

#define CPP_FUN_IMPL_SELECT_CONST_0 (   ...)
Value:
CPP_PP_EVAL_( \
(__VA_ARGS__,) \
)(__VA_ARGS__)
#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_(MAYBE_NOEXCEPT,...)
INTERNAL ONLY.
Definition: concepts.hpp:601

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_1

#define CPP_FUN_IMPL_SELECT_CONST_1 (   ...)
Value:
CPP_PP_EVAL( \
CPP_PP_CAT(CPP_FUN_IMPL_EAT_CONST_, __VA_ARGS__),)( \
CPP_PP_CAT(CPP_FUN_IMPL_EAT_CONST_, __VA_ARGS__))
#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_(MAYBE_NOEXCEPT,...)
INTERNAL ONLY.
Definition: concepts.hpp:555

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_

#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_ (   MAYBE_NOEXCEPT,
  ... 
)
Value:
CPP_PP_EVAL2(CPP_PP_CHECK, CPP_PP_CAT( \
CPP_PP_PROBE_NOEXCEPT_PROBE_, MAYBE_NOEXCEPT)))

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_0

#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_0 (   ...)
Value:
std::enable_if_t< \
CPP_PP_EVAL( \
CPP_PP_CAT, \
CPP_FUN_IMPL_EAT_REQUIRES_, \
__VA_ARGS__) && CPP_TRUE_FN, \
::concepts::detail::Nil \
> = {}) const \
CPP_PP_IGNORE_CXX2A_COMPAT_END

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_1

#define CPP_FUN_IMPL_SELECT_CONST_NOEXCEPT_1 (   ...)
Value:
std::enable_if_t< \
CPP_PP_EVAL( \
CPP_PP_CAT, \
CPP_FUN_IMPL_EAT_REQUIRES_, \
CPP_PP_CAT(CPP_FUN_IMPL_EAT_NOEXCEPT_, __VA_ARGS__)) && CPP_TRUE_FN,\
::concepts::detail::Nil \
> = {}) const \
CPP_PP_EXPAND(CPP_PP_CAT(CPP_FUN_IMPL_SHOW_NOEXCEPT_, __VA_ARGS__)))

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_

#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_ (   MAYBE_NOEXCEPT,
  ... 
)
Value:
CPP_PP_EVAL2(CPP_PP_CHECK, CPP_PP_CAT( \
CPP_PP_PROBE_NOEXCEPT_PROBE_, MAYBE_NOEXCEPT)))

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_0

#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_0 (   ...)
Value:
std::enable_if_t< \
CPP_PP_CAT(CPP_FUN_IMPL_EAT_REQUIRES_, __VA_ARGS__) && CPP_TRUE_FN, \
::concepts::detail::Nil \
> = {}) \
CPP_PP_IGNORE_CXX2A_COMPAT_END

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_1

#define CPP_FUN_IMPL_SELECT_NONCONST_NOEXCEPT_1 (   ...)
Value:
std::enable_if_t< \
CPP_PP_EVAL( \
CPP_PP_CAT, \
CPP_FUN_IMPL_EAT_REQUIRES_, \
CPP_PP_CAT(CPP_FUN_IMPL_EAT_NOEXCEPT_, __VA_ARGS__) \
) && CPP_TRUE_FN, \
::concepts::detail::Nil \
> = {}) \
CPP_PP_EXPAND(CPP_PP_CAT(CPP_FUN_IMPL_SHOW_NOEXCEPT_, __VA_ARGS__)))

INTERNAL ONLY.

◆ CPP_FUN_IMPL_SHOW_NOEXCEPT_noexcept

#define CPP_FUN_IMPL_SHOW_NOEXCEPT_noexcept (   ...)
Value:
noexcept(__VA_ARGS__) CPP_PP_IGNORE_CXX2A_COMPAT_END \
CPP_PP_EAT CPP_PP_LPAREN

INTERNAL ONLY.

◆ CPP_PP_COUNT

#define CPP_PP_COUNT (   ...)
Value:
CPP_PP_EXPAND(CPP_PP_COUNT_(__VA_ARGS__, \
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, \
40, 39, 38, 37, 36, 35, 34, 33, 32, 31, \
30, 29, 28, 27, 26, 25, 24, 23, 22, 21, \
20, 19, 18, 17, 16, 15, 14, 13, 12, 11, \
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,))

◆ CPP_PP_IS_NOT_EMPTY

#define CPP_PP_IS_NOT_EMPTY (   ...)
Value:
CPP_PP_EVAL( \
CPP_PP_CHECK, \
CPP_PP_CAT( \
CPP_PP_PROBE_EMPTY_PROBE_, \
CPP_PP_PROBE_EMPTY __VA_ARGS__ ()))

◆ CPP_requires

#define CPP_requires (   NAME,
  REQS 
)
Value:
auto CPP_PP_CAT(NAME, requires_test_) \
CPP_REQUIRES_AUX_(NAME, CPP_REQUIRES_ ## REQS)

◆ CPP_REQUIRES_AUX_

#define CPP_REQUIRES_AUX_ (   NAME,
  ... 
)
Value:
__VA_ARGS__ \
template<typename... As> \
auto CPP_PP_CAT(NAME, requires_)( \
::concepts::detail::tag<As...> *, \
decltype(&CPP_PP_CAT(NAME, requires_test_)<As...>) = nullptr) \
-> char(&)[1]; \
auto CPP_PP_CAT(NAME, requires_)(...) -> char(&)[2]

INTERNAL ONLY.

◆ CPP_requires_ref

#define CPP_requires_ref (   NAME,
  ... 
)
Value:
(1u == sizeof(CPP_PP_CAT(NAME, requires_)( \
(::concepts::detail::tag<__VA_ARGS__>*)nullptr)))

◆ CPP_TEMPLATE_DEF_SFINAE_AUX_

#define CPP_TEMPLATE_DEF_SFINAE_AUX_ (   ...)
Value:
, \
bool CPP_true, \
std::enable_if_t< \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__) && \
CPP_BOOL(CPP_true), \
int>>

INTERNAL ONLY.

◆ CPP_template_sfinae

#define CPP_template_sfinae (   ...)
Value:
CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN \
template<__VA_ARGS__ CPP_TEMPLATE_SFINAE_AUX_
#define CPP_TEMPLATE_SFINAE_AUX_(...)
INTERNAL ONLY.
Definition: concepts.hpp:289

◆ CPP_TEMPLATE_SFINAE_AUX_

#define CPP_TEMPLATE_SFINAE_AUX_ (   ...)
Value:
CPP_PP_CAT( \
CPP_TEMPLATE_SFINAE_AUX_WHICH_(__VA_ARGS__,))(__VA_ARGS__)
#define CPP_TEMPLATE_SFINAE_AUX_WHICH_(FIRST,...)
INTERNAL ONLY.
Definition: concepts.hpp:283

INTERNAL ONLY.

◆ CPP_TEMPLATE_SFINAE_AUX_0

#define CPP_TEMPLATE_SFINAE_AUX_0 (   ...)
Value:
, \
bool CPP_true = true, \
std::enable_if_t< \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__) && \
CPP_BOOL(CPP_true), \
int> = 0> \
CPP_PP_IGNORE_CXX2A_COMPAT_END

INTERNAL ONLY.

◆ CPP_TEMPLATE_SFINAE_AUX_1

#define CPP_TEMPLATE_SFINAE_AUX_1 (   DECL,
  ... 
)
Value:
, \
bool CPP_true = true, \
std::enable_if_t<__VA_ARGS__ && CPP_BOOL(CPP_true), int> = 0> \
auto CPP_CONCEPT_NAME_(DECL)( \
::concepts::detail::tag<CPP_CONCEPT_PARAMS_(DECL)>*) \
-> char(&)[1]; \
auto CPP_CONCEPT_NAME_(DECL)(...) -> char(&)[2] \
CPP_PP_IGNORE_CXX2A_COMPAT_END
#define CPP_CONCEPT_NAME_(DECL)
INTERNAL ONLY.
Definition: concepts.hpp:316
#define CPP_CONCEPT_PARAMS_(DECL)
INTERNAL ONLY.
Definition: concepts.hpp:322

INTERNAL ONLY.

◆ CPP_TEMPLATE_SFINAE_AUX_WHICH_

#define CPP_TEMPLATE_SFINAE_AUX_WHICH_ (   FIRST,
  ... 
)
Value:
CPP_PP_EVAL( \
CPP_PP_CHECK, \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_PROBE_CONCEPT_, FIRST))

INTERNAL ONLY.

Function Documentation

◆ CPP_requires() [1/7]

template<typename T , typename U >
concepts::defs::CPP_requires ( assignable_from_  ,
requires(T t, U &&u)(t=(U &&) u, requires_< same_as< T, decltype(t=(U &&) u)>>)   
)

\concept assignable_from_

The assignable_from_ concept

◆ CPP_requires() [2/7]

template<typename T >
concepts::detail::CPP_requires ( boolean_testable_frag_  ,
requires(T &&t)(!(T &&) t, concepts::requires_< boolean_testable_impl_< decltype(!(T &&) t)>>)   
)

\concept boolean_testable_frag_

The boolean_testable_frag_ concept

◆ CPP_requires() [3/7]

template<typename From , typename To >
concepts::defs::CPP_requires ( explicitly_convertible_to_  ,
requires(From(*from)())(static_cast< To >(from()))   
)

\concept explicitly_convertible_to_

The explicitly_convertible_to_ concept

◆ CPP_requires() [4/7]

template<typename T , typename U >
concepts::detail::CPP_requires ( partially_ordered_with_frag_  ,
requires(detail::as_cref_t< T > &t, detail::as_cref_t< U > &u)(concepts::requires_< boolean_testable_< decltype(t< u)>>, concepts::requires_< boolean_testable_< decltype(t > u)>>, concepts::requires_< boolean_testable_< decltype(t<=u)>>, concepts::requires_< boolean_testable_< decltype(t >=u)>>, concepts::requires_< boolean_testable_< decltype(u< t)>>, concepts::requires_< boolean_testable_< decltype(u > t)>>, concepts::requires_< boolean_testable_< decltype(u<=t)>>, concepts::requires_< boolean_testable_< decltype(u >=t)>>)   
)

\concept partially_ordered_with_frag_

The partially_ordered_with_frag_ concept

◆ CPP_requires() [5/7]

template<typename T >
concepts::defs::CPP_requires ( swappable_  ,
requires(T &t, T &u)(concepts::swap(t, u))   
)

\concept swappable_

The swappable_ concept

◆ CPP_requires() [6/7]

template<typename T , typename U >
concepts::defs::CPP_requires ( swappable_with_  ,
requires(T &&t, U &&u)(concepts::swap((T &&) t,(T &&) t), concepts::swap((U &&) u,(U &&) u), concepts::swap((U &&) u,(T &&) t), concepts::swap((T &&) t,(U &&) u))   
)

\concept swappable_with_

The swappable_with_ concept

◆ CPP_requires() [7/7]

template<typename T , typename U >
CPP_DIAGNOSTIC_PUSH CPP_DIAGNOSTIC_IGNORE_FLOAT_EQUAL concepts::detail::CPP_requires ( weakly_equality_comparable_with_frag_  ,
requires(detail::as_cref_t< T > t, detail::as_cref_t< U > u)(concepts::requires_< boolean_testable_< decltype(t==u)>>, concepts::requires_< boolean_testable_< decltype(t !=u)>>, concepts::requires_< boolean_testable_< decltype(u==t)>>, concepts::requires_< boolean_testable_< decltype(u !=t)>>)   
)

\concept weakly_equality_comparable_with_frag_

The weakly_equality_comparable_with_frag_ concept

◆ CPP_template() [1/8]

concepts::defs::CPP_template ( typename T  )

\concept copy_assignable_

The copy_assignable_ concept

◆ CPP_template() [2/8]

concepts::defs::CPP_template ( typename T  )

\concept copy_constructible_

The copy_constructible_ concept

◆ CPP_template() [3/8]

concepts::defs::CPP_template ( typename T  )

\concept move_assignable_

The move_assignable_ concept

◆ CPP_template() [4/8]

concepts::defs::CPP_template ( typename T  ,
typename U   
)

\concept common_reference_with_

The common_reference_with_ concept

◆ CPP_template() [5/8]

concepts::defs::CPP_template ( typename T  ,
typename U   
)

\concept common_with_

The common_with_ concept

◆ CPP_template() [6/8]

concepts::defs::CPP_template ( typename T  ,
typename U   
)

\concept derived_from_

The derived_from_ concept

◆ CPP_template() [7/8]

concepts::defs::CPP_template ( typename T  ,
typename U   
)

\concept equality_comparable_with_

The equality_comparable_with_ concept

◆ CPP_template() [8/8]

concepts::defs::CPP_template ( typename T  ,
typename U   
)

\concept totally_ordered_with_

The totally_ordered_with_ concept

Variable Documentation

◆ and_v

template<bool... Bs>
constexpr CPP_INLINE_VAR bool concepts::and_v
constexpr
Initial value:
=
META_IS_SAME(detail::bools<Bs..., true>, detail::bools<true, Bs...>)

◆ assignable_from

template<typename T , typename U >
CPP_concept concepts::defs::assignable_from
Initial value:
=
std::is_lvalue_reference<T>::value &&
common_reference_with<detail::as_cref_t<T>, detail::as_cref_t<U>> &&
CPP_requires_ref(defs::assignable_from_, T, U)

\concept assignable_from

The assignable_from concept

◆ boolean_testable_

template<typename T >
CPP_concept concepts::detail::boolean_testable_
Initial value:
=
CPP_requires_ref(boolean_testable_frag_, T) &&
boolean_testable_impl_<T>

\concept boolean_testable_

The boolean_testable_ concept

◆ boolean_testable_impl_

template<typename T >
CPP_concept concepts::detail::boolean_testable_impl_ = convertible_to<T, bool>

\concept boolean_testable_impl_

The boolean_testable_impl_ concept

◆ common_reference_with

template<typename T , typename U >
CPP_concept concepts::defs::common_reference_with
Initial value:
=
CPP_concept_ref(concepts::common_reference_with_, T, U)

\concept common_reference_with

The common_reference_with concept

◆ common_with

template<typename T , typename U >
CPP_concept concepts::defs::common_with
Initial value:
=
CPP_concept_ref(concepts::common_with_, T, U)

\concept common_with

The common_with concept

◆ constructible_from

template<typename T , typename... Args>
CPP_concept concepts::defs::constructible_from
Initial value:
=
destructible<T> &&
META_IS_CONSTRUCTIBLE(T, Args...)

\concept constructible_from

The constructible_from concept

◆ convertible_to

template<typename From , typename To >
CPP_concept concepts::defs::convertible_to
Initial value:
=
implicitly_convertible_to<From, To> &&
explicitly_convertible_to<From, To>

\concept convertible_to

The convertible_to concept

◆ copy_constructible

template<typename T >
CPP_concept concepts::defs::copy_constructible
Initial value:
=
move_constructible<T> &&
CPP_concept_ref(concepts::copy_constructible_, T)

\concept copy_constructible

The copy_constructible concept

◆ copyable

template<typename T >
CPP_concept concepts::defs::copyable
Initial value:
=
copy_constructible<T> &&
movable<T> &&
CPP_concept_ref(concepts::copy_assignable_, T)

\concept copyable

The copyable concept

◆ default_constructible

template<typename T >
CPP_concept concepts::defs::default_constructible
Initial value:
=
constructible_from<T>

\concept default_constructible

The default_constructible concept

◆ derived_from

template<typename T , typename U >
CPP_concept concepts::defs::derived_from
Initial value:
=
META_IS_BASE_OF(U, T) &&
CPP_concept_ref(concepts::derived_from_, T, U)

\concept derived_from

The derived_from concept

◆ destructible

template<typename T >
CPP_concept concepts::defs::destructible
Initial value:
=
std::is_nothrow_destructible<T>::value

\concept destructible

The destructible concept

◆ equality_comparable

template<typename T >
CPP_concept concepts::defs::equality_comparable
Initial value:
=
detail::weakly_equality_comparable_with_<T, T>

\concept equality_comparable

The equality_comparable concept

◆ equality_comparable_with

template<typename T , typename U >
CPP_concept concepts::defs::equality_comparable_with
Initial value:
=
equality_comparable<T> &&
equality_comparable<U> &&
detail::weakly_equality_comparable_with_<T, U> &&
common_reference_with<detail::as_cref_t<T>, detail::as_cref_t<U>> &&
CPP_concept_ref(concepts::equality_comparable_with_, T, U)

\concept equality_comparable_with

The equality_comparable_with concept

◆ explicitly_convertible_to

template<typename From , typename To >
CPP_concept concepts::defs::explicitly_convertible_to
Initial value:
=
CPP_requires_ref(concepts::explicitly_convertible_to_, From, To)

\concept explicitly_convertible_to

The explicitly_convertible_to concept

◆ implicitly_convertible_to

template<typename From , typename To >
CPP_concept concepts::defs::implicitly_convertible_to
Initial value:
=
std::is_convertible<std::add_rvalue_reference_t<From>, To>::value

\concept implicitly_convertible_to

The implicitly_convertible_to concept

◆ integral

template<typename T >
CPP_concept concepts::defs::integral
Initial value:
=
std::is_integral<T>::value

\concept integral

The integral concept

◆ is_true

template<bool B>
CPP_concept concepts::defs::is_true = B

\concept is_true

The is_true concept

◆ movable

template<typename T >
CPP_concept concepts::defs::movable
Initial value:
=
std::is_object<T>::value &&
move_constructible<T> &&
CPP_concept_ref(concepts::move_assignable_, T) &&
swappable<T>

\concept movable

The movable concept

◆ move_constructible

template<typename T >
CPP_concept concepts::defs::move_constructible
Initial value:
=
constructible_from<T, T> &&
convertible_to<T, T>

\concept move_constructible

The move_constructible concept

◆ or_v

template<bool... Bs>
constexpr CPP_INLINE_VAR bool concepts::or_v
constexpr
Initial value:
=
!META_IS_SAME(detail::bools<Bs..., false>, detail::bools<false, Bs...>)

◆ partially_ordered_with_

template<typename T , typename U >
CPP_concept concepts::detail::partially_ordered_with_
Initial value:
=
CPP_requires_ref(partially_ordered_with_frag_, T, U)

\concept partially_ordered_with_

The partially_ordered_with_ concept

◆ regular

template<typename T >
CPP_concept concepts::defs::regular
Initial value:
=
semiregular<T> &&
equality_comparable<T>

\concept regular

The regular concept

◆ same_as

template<typename A , typename B >
CPP_concept concepts::defs::same_as
Initial value:
=
META_IS_SAME(A, B) && META_IS_SAME(B, A)

\concept same_as

The same_as concept

◆ satisfies

template<class T , template< typename... > class Trait, typename... Args>
CPP_concept concepts::defs::satisfies
Initial value:
=
static_cast<bool>(Trait<T, Args...>::type::value)

\concept satisfies

The satisfies concept

◆ semiregular

template<typename T >
CPP_concept concepts::defs::semiregular
Initial value:
=
copyable<T> &&
default_constructible<T>

\concept semiregular

The semiregular concept

◆ signed_integral

template<typename T >
CPP_concept concepts::defs::signed_integral
Initial value:
=
integral<T> &&
std::is_signed<T>::value

\concept signed_integral

The signed_integral concept

◆ swappable

template<typename T >
CPP_concept concepts::defs::swappable
Initial value:
=
CPP_requires_ref(defs::swappable_, T)

\concept swappable

The swappable concept

◆ swappable_with

template<typename T , typename U >
CPP_concept concepts::defs::swappable_with
Initial value:
=
common_reference_with<detail::as_cref_t<T>, detail::as_cref_t<U>> &&
CPP_requires_ref(defs::swappable_with_, T, U)

\concept swappable_with

The swappable_with concept

◆ totally_ordered

template<typename T >
CPP_concept concepts::defs::totally_ordered
Initial value:
=
equality_comparable<T> &&
detail::partially_ordered_with_<T, T>

\concept totally_ordered

The totally_ordered concept

◆ totally_ordered_with

template<typename T , typename U >
CPP_concept concepts::defs::totally_ordered_with
Initial value:
=
totally_ordered<T> &&
totally_ordered<U> &&
equality_comparable_with<T, U> &&
CPP_concept_ref(concepts::totally_ordered_with_, T, U)

\concept totally_ordered_with

The totally_ordered_with concept

◆ type

template<typename... Args>
CPP_concept concepts::defs::type = true

\concept type

The type concept

◆ unsigned_integral

template<typename T >
CPP_concept concepts::defs::unsigned_integral
Initial value:
=
integral<T> &&
!signed_integral<T>

\concept unsigned_integral

The unsigned_integral concept

◆ weakly_equality_comparable_with_

template<typename T , typename U >
CPP_concept concepts::detail::weakly_equality_comparable_with_
Initial value:
=
CPP_requires_ref(weakly_equality_comparable_with_frag_, T, U)

\concept weakly_equality_comparable_with_

The weakly_equality_comparable_with_ concept