Range-v3
Range algorithms, views, and actions for the Standard Library
 
Loading...
Searching...
No Matches
concepts.hpp File Reference

Classes

struct  concepts::return_t_< typename >
 

Concepts

concept  concepts::defs::is_true
 The is_true concept.
 
concept  concepts::defs::type
 The type concept.
 
concept  concepts::defs::satisfies
 The satisfies concept.
 
concept  concepts::defs::same_as
 The same_as concept.
 
concept  concepts::defs::implicitly_convertible_to
 The implicitly_convertible_to concept.
 
concept  concepts::defs::explicitly_convertible_to_
 The explicitly_convertible_to_ concept.
 
concept  concepts::defs::explicitly_convertible_to
 The explicitly_convertible_to concept.
 
concept  concepts::defs::convertible_to
 The convertible_to concept.
 
concept  concepts::defs::derived_from_
 The derived_from_ concept.
 
concept  concepts::defs::derived_from
 The derived_from concept.
 
concept  concepts::defs::common_reference_with_
 The common_reference_with_ concept.
 
concept  concepts::defs::common_reference_with
 The common_reference_with concept.
 
concept  concepts::defs::common_with_
 The common_with_ concept.
 
concept  concepts::defs::common_with
 The common_with concept.
 
concept  concepts::defs::integral
 The integral concept.
 
concept  concepts::defs::signed_integral
 The signed_integral concept.
 
concept  concepts::defs::unsigned_integral
 The unsigned_integral concept.
 
concept  concepts::defs::assignable_from_
 The assignable_from_ concept.
 
concept  concepts::defs::assignable_from
 The assignable_from concept.
 
concept  concepts::defs::swappable_
 The swappable_ concept.
 
concept  concepts::defs::swappable
 The swappable concept.
 
concept  concepts::defs::swappable_with_
 The swappable_with_ concept.
 
concept  concepts::defs::swappable_with
 The swappable_with concept.
 
concept  concepts::detail::boolean_testable_impl_
 The boolean_testable_impl_ concept.
 
concept  concepts::detail::boolean_testable_frag_
 The boolean_testable_frag_ concept.
 
concept  concepts::detail::boolean_testable_
 The boolean_testable_ concept.
 
concept  concepts::detail::weakly_equality_comparable_with_frag_
 The weakly_equality_comparable_with_frag_ concept.
 
concept  concepts::detail::weakly_equality_comparable_with_
 The weakly_equality_comparable_with_ concept.
 
concept  concepts::detail::partially_ordered_with_frag_
 The partially_ordered_with_frag_ concept.
 
concept  concepts::detail::partially_ordered_with_
 The partially_ordered_with_ concept.
 
concept  concepts::defs::equality_comparable
 The equality_comparable concept.
 
concept  concepts::defs::equality_comparable_with_
 The equality_comparable_with_ concept.
 
concept  concepts::defs::equality_comparable_with
 The equality_comparable_with concept.
 
concept  concepts::defs::totally_ordered
 The totally_ordered concept.
 
concept  concepts::defs::totally_ordered_with_
 The totally_ordered_with_ concept.
 
concept  concepts::defs::totally_ordered_with
 The totally_ordered_with concept.
 
concept  concepts::defs::destructible
 The destructible concept.
 
concept  concepts::defs::constructible_from
 The constructible_from concept.
 
concept  concepts::defs::default_constructible
 The default_constructible concept.
 
concept  concepts::defs::move_constructible
 The move_constructible concept.
 
concept  concepts::defs::copy_constructible_
 The copy_constructible_ concept.
 
concept  concepts::defs::copy_constructible
 The copy_constructible concept.
 
concept  concepts::defs::move_assignable_
 The move_assignable_ concept.
 
concept  concepts::defs::movable
 The movable concept.
 
concept  concepts::defs::copy_assignable_
 The copy_assignable_ concept.
 
concept  concepts::defs::copyable
 The copyable concept.
 
concept  concepts::defs::semiregular
 The semiregular concept.
 
concept  concepts::defs::regular
 The regular concept.
 

Macros

#define concept(NAME)
 
#define CPP_and   &&
 
#define CPP_and_sfinae    && CPP_BOOL(CPP_true), int> = 0, std::enable_if_t<
 INTERNAL ONLY.
 
#define CPP_and_sfinae_def    && CPP_BOOL(CPP_true), int>, std::enable_if_t<
 INTERNAL ONLY.
 
#define CPP_assert(...)
 
#define CPP_assert_msg   static_assert
 
#define CPP_auto_fun(X)
 
#define CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_IMPL_(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_0(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_1(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_CONST_2(...)
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_RETURNS_return
 INTERNAL ONLY.
 
#define CPP_AUTO_FUN_SELECT_RETURNS_(MAYBE_CONST, ...)
 INTERNAL ONLY.
 
#define CPP_auto_member
 
#define CPP_BOOL(...)
 
#define CPP_broken_friend_ret(...)
 INTERNAL ONLY.
 
#define CPP_concept   META_CONCEPT
 
#define CPP_CONCEPT_EQUALS_(...)
 
#define CPP_CONCEPT_NAME_(DECL)
 INTERNAL ONLY.
 
#define CPP_CONCEPT_PARAMS_(DECL)
 INTERNAL ONLY.
 
#define CPP_concept_ref(NAME, ...)
 
#define CPP_ctor(TYPE)
 
#define CPP_CTOR_IMPL_1_(...)
 INTERNAL ONLY.
 
#define CPP_ctor_sfinae(TYPE)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_EAT_NOEXCEPT_noexcept(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_IMPL_1_(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_MAKE_PROBE(FIRST, ...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_PROBE_NOEXCEPT_noexcept    CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_REQUIRES(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_REQUIRES_0(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_REQUIRES_1(...)
 INTERNAL ONLY.
 
#define CPP_CTOR_SFINAE_SHOW_NOEXCEPT_noexcept(...)
 INTERNAL ONLY.
 
#define CPP_CXX_CONCEPTS   201800L
 
#define CPP_CXX_VA_OPT   0
 
#define CPP_EAT_CONCEPT_(DECL)
 INTERNAL ONLY.
 
#define CPP_EAT_CONCEPT_concept
 INTERNAL ONLY.
 
#define CPP_fun(X)
 
#define CPP_FUN_IMPL_1_(...)
 INTERNAL ONLY.
 
#define CPP_member
 
#define CPP_member_sfinae    CPP_broken_friend_member
 INTERNAL ONLY.
 
#define CPP_NOT(...)
 
#define CPP_PP_CAT(X, ...)
 
#define CPP_PP_CAT_(X, ...)
 
#define CPP_PP_CHECK(...)
 
#define CPP_PP_CHECK_N(x, n, ...)
 
#define CPP_PP_COMMA()
 
#define CPP_PP_COMMA_IIF(X)
 
#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, ...)
 
#define CPP_PP_EAT(...)
 
#define CPP_PP_EAT_MUTABLE_mutable
 INTERNAL ONLY.
 
#define CPP_PP_EMPTY()
 
#define CPP_PP_EVAL(X, ...)
 
#define CPP_PP_EVAL2(X, ...)
 
#define CPP_PP_EVAL2_(X, ARGS)
 
#define CPP_PP_EVAL_(X, ARGS)
 
#define CPP_PP_EXPAND(...)
 
#define CPP_PP_FIRST(LIST)
 
#define CPP_PP_FIRST_(...)
 
#define CPP_PP_FOR_EACH(M, ...)
 
#define CPP_PP_FOR_EACH_1(M, _1)
 
#define CPP_PP_FOR_EACH_2(M, _1, _2)
 
#define CPP_PP_FOR_EACH_3(M, _1, _2, _3)
 
#define CPP_PP_FOR_EACH_4(M, _1, _2, _3, _4)
 
#define CPP_PP_FOR_EACH_5(M, _1, _2, _3, _4, _5)
 
#define CPP_PP_FOR_EACH_6(M, _1, _2, _3, _4, _5, _6)
 
#define CPP_PP_FOR_EACH_7(M, _1, _2, _3, _4, _5, _6, _7)
 
#define CPP_PP_FOR_EACH_8(M, _1, _2, _3, _4, _5, _6, _7, _8)
 
#define CPP_PP_FOR_EACH_N(N, M, ...)
 
#define CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN
 
#define CPP_PP_IGNORE_CXX2A_COMPAT_END
 
#define CPP_PP_IIF(BIT)
 
#define CPP_PP_IIF_0(TRUE, ...)
 
#define CPP_PP_IIF_1(TRUE, ...)
 
#define CPP_PP_IS_NOT_EMPTY(...)
 
#define CPP_PP_IS_PAREN(x)
 
#define CPP_PP_IS_PAREN_PROBE(...)
 
#define CPP_PP_LBRACE()
 
#define CPP_PP_LPAREN   (
 
#define CPP_PP_NOT(BIT)
 
#define CPP_PP_NOT_0   1
 
#define CPP_PP_NOT_1   0
 
#define CPP_PP_PROBE(x)
 
#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_PROBE_EMPTY()
 
#define CPP_PP_PROBE_EMPTY_PROBE_CPP_PP_PROBE_EMPTY    CPP_PP_PROBE(~)
 
#define CPP_PP_PROBE_N(x, n)
 
#define CPP_PP_RBRACE()
 
#define CPP_PP_RPAREN   )
 
#define CPP_PP_SECOND(LIST)
 
#define CPP_PP_SECOND_(...)
 
#define CPP_requires(NAME, REQS)
 
#define CPP_REQUIRES_AUX_(...)
 INTERNAL ONLY.
 
#define CPP_requires_ref(NAME, ...)
 
#define CPP_REQUIRES_requires(...)
 INTERNAL ONLY.
 
#define CPP_ret(...)
 
#define CPP_template(...)
 
#define CPP_TEMPLATE_AUX_(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_AUX_0(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_AUX_1(DECL, ...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_AUX_WHICH_(FIRST, ...)
 INTERNAL ONLY.
 
#define CPP_template_def   CPP_template
 
#define CPP_template_def_sfinae(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_DEF_SFINAE_AUX_(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_EXPAND_(X, Y)
 
#define CPP_TEMPLATE_PROBE_CONCEPT_concept    CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_template_sfinae(...)
 
#define CPP_TEMPLATE_SFINAE_AUX_(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_0(...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_1(DECL, ...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_3_requires
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_AUX_WHICH_(FIRST, ...)
 INTERNAL ONLY.
 
#define CPP_TEMPLATE_SFINAE_PROBE_CONCEPT_concept    CPP_PP_PROBE(~)
 INTERNAL ONLY.
 
#define CPP_TRUE_FN   CPP_true_fn(::concepts::detail::xNil{})
 

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>
 

Variables

template<bool... Bs>
constexpr bool concepts::and_v
 
template<bool... Bs>
constexpr bool concepts::or_v
 
template<bool B>
constexpr std::enable_if_t< B, intconcepts::requires_ = 0
 

Macro Definition Documentation

◆ concept

#define concept ( NAME)
Value:
concept NAME CPP_CONCEPT_EQUALS_

◆ CPP_assert

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

◆ CPP_auto_fun

#define CPP_auto_fun ( X)
Value:
#define CPP_AUTO_FUN_IMPL_(...)
INTERNAL ONLY.
Definition concepts.hpp:656

◆ 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_IMPL_

#define CPP_AUTO_FUN_IMPL_ ( ...)
Value:
(__VA_ARGS__) CPP_AUTO_FUN_RETURNS_
#define CPP_AUTO_FUN_RETURNS_(...)
INTERNAL ONLY.
Definition concepts.hpp:659

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_DECLTYPE_NOEXCEPT_(...)
INTERNAL ONLY.
Definition concepts.hpp:704

INTERNAL ONLY.

◆ CPP_AUTO_FUN_RETURNS_CONST_1

#define CPP_AUTO_FUN_RETURNS_CONST_1 ( ...)
Value:
#define CPP_AUTO_FUN_RETURNS_CONST_0(...)
INTERNAL ONLY.
Definition concepts.hpp:689

INTERNAL ONLY.

◆ CPP_AUTO_FUN_RETURNS_CONST_2

#define CPP_AUTO_FUN_RETURNS_CONST_2 ( ...)
Value:
CPP_PP_CAT(CPP_PP_EAT_MUTABLE_, __VA_ARGS__) CPP_AUTO_FUN_RETURNS_CONST_0

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_BOOL

#define CPP_BOOL ( ...)
Value:
__VA_ARGS__

◆ CPP_broken_friend_ret

#define CPP_broken_friend_ret ( ...)
Value:
__VA_ARGS__ CPP_PP_EXPAND

INTERNAL ONLY.

◆ CPP_CONCEPT_EQUALS_

#define CPP_CONCEPT_EQUALS_ ( ...)
Value:
=

◆ 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_PARAMS_

#define CPP_CONCEPT_PARAMS_ ( DECL)
Value:
CPP_PP_EVAL(CPP_PP_SECOND, CPP_EAT_CONCEPT_(DECL))

INTERNAL ONLY.

◆ CPP_concept_ref

#define CPP_concept_ref ( NAME,
... )
Value:
NAME<__VA_ARGS__>

◆ CPP_ctor

#define CPP_ctor ( TYPE)
Value:
#define CPP_CTOR_IMPL_1_(...)
INTERNAL ONLY.
Definition concepts.hpp:223

◆ CPP_CTOR_IMPL_1_

#define CPP_CTOR_IMPL_1_ ( ...)
Value:
(__VA_ARGS__) CPP_PP_EXPAND

INTERNAL ONLY.

◆ 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__))) \
#define CPP_CTOR_SFINAE_REQUIRES(...)
INTERNAL ONLY.
Definition concepts.hpp:380

INTERNAL ONLY.

◆ CPP_CTOR_SFINAE_MAKE_PROBE

#define CPP_CTOR_SFINAE_MAKE_PROBE ( FIRST,
... )
Value:
CPP_PP_CAT(CPP_CTOR_SFINAE_PROBE_NOEXCEPT_, FIRST)

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_EAT_CONCEPT_

#define CPP_EAT_CONCEPT_ ( DECL)
Value:
CPP_PP_CAT(CPP_EAT_CONCEPT_, DECL)

INTERNAL ONLY.

◆ CPP_fun

#define CPP_fun ( X)
Value:
#define CPP_FUN_IMPL_1_(...)
INTERNAL ONLY.
Definition concepts.hpp:518

◆ CPP_FUN_IMPL_1_

#define CPP_FUN_IMPL_1_ ( ...)
Value:
(__VA_ARGS__) \
CPP_PP_EXPAND

INTERNAL ONLY.

◆ CPP_NOT

#define CPP_NOT ( ...)
Value:
(!(__VA_ARGS__))

◆ CPP_PP_CAT

#define CPP_PP_CAT ( X,
... )
Value:
CPP_PP_CAT_(X, __VA_ARGS__)

◆ CPP_PP_CAT_

#define CPP_PP_CAT_ ( X,
... )
Value:
X ## __VA_ARGS__

◆ CPP_PP_CHECK

#define CPP_PP_CHECK ( ...)
Value:
CPP_PP_EXPAND(CPP_PP_CHECK_N(__VA_ARGS__, 0,))

◆ CPP_PP_CHECK_N

#define CPP_PP_CHECK_N ( x,
n,
... )
Value:
n

◆ CPP_PP_COMMA

#define CPP_PP_COMMA ( )
Value:
,

◆ CPP_PP_COMMA_IIF

#define CPP_PP_COMMA_IIF ( X)
Value:
CPP_PP_IIF(X)(CPP_PP_EMPTY, CPP_PP_COMMA)()

◆ 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_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,
... )
Value:
N

◆ CPP_PP_EVAL

#define CPP_PP_EVAL ( X,
... )
Value:
CPP_PP_EVAL_(X, (__VA_ARGS__))

◆ CPP_PP_EVAL2

#define CPP_PP_EVAL2 ( X,
... )
Value:
CPP_PP_EVAL2_(X, (__VA_ARGS__))

◆ CPP_PP_EVAL2_

#define CPP_PP_EVAL2_ ( X,
ARGS )
Value:
X ARGS

◆ CPP_PP_EVAL_

#define CPP_PP_EVAL_ ( X,
ARGS )
Value:
X ARGS

◆ CPP_PP_EXPAND

#define CPP_PP_EXPAND ( ...)
Value:
__VA_ARGS__

◆ CPP_PP_FIRST

#define CPP_PP_FIRST ( LIST)
Value:
CPP_PP_FIRST_ LIST

◆ CPP_PP_FIRST_

#define CPP_PP_FIRST_ ( ...)
Value:
__VA_ARGS__ CPP_PP_EAT

◆ CPP_PP_FOR_EACH

#define CPP_PP_FOR_EACH ( M,
... )
Value:
CPP_PP_FOR_EACH_N(CPP_PP_COUNT(__VA_ARGS__), M, __VA_ARGS__)

◆ CPP_PP_FOR_EACH_1

#define CPP_PP_FOR_EACH_1 ( M,
_1 )
Value:
M(_1)

◆ CPP_PP_FOR_EACH_2

#define CPP_PP_FOR_EACH_2 ( M,
_1,
_2 )
Value:
M(_1), M(_2)

◆ CPP_PP_FOR_EACH_3

#define CPP_PP_FOR_EACH_3 ( M,
_1,
_2,
_3 )
Value:
M(_1), M(_2), M(_3)

◆ CPP_PP_FOR_EACH_4

#define CPP_PP_FOR_EACH_4 ( M,
_1,
_2,
_3,
_4 )
Value:
M(_1), M(_2), M(_3), M(_4)

◆ CPP_PP_FOR_EACH_5

#define CPP_PP_FOR_EACH_5 ( M,
_1,
_2,
_3,
_4,
_5 )
Value:
M(_1), M(_2), M(_3), M(_4), M(_5)

◆ CPP_PP_FOR_EACH_6

#define CPP_PP_FOR_EACH_6 ( M,
_1,
_2,
_3,
_4,
_5,
_6 )
Value:
M(_1), M(_2), M(_3), M(_4), M(_5), M(_6)

◆ CPP_PP_FOR_EACH_7

#define CPP_PP_FOR_EACH_7 ( M,
_1,
_2,
_3,
_4,
_5,
_6,
_7 )
Value:
M(_1), M(_2), M(_3), M(_4), M(_5), M(_6), M(_7)

◆ CPP_PP_FOR_EACH_8

#define CPP_PP_FOR_EACH_8 ( M,
_1,
_2,
_3,
_4,
_5,
_6,
_7,
_8 )
Value:
M(_1), M(_2), M(_3), M(_4), M(_5), M(_6), M(_7), M(_8)

◆ CPP_PP_FOR_EACH_N

#define CPP_PP_FOR_EACH_N ( N,
M,
... )
Value:
CPP_PP_CAT(CPP_PP_FOR_EACH_, N)(M, __VA_ARGS__)

◆ CPP_PP_IIF

#define CPP_PP_IIF ( BIT)
Value:
CPP_PP_CAT_(CPP_PP_IIF_, BIT)

◆ CPP_PP_IIF_0

#define CPP_PP_IIF_0 ( TRUE,
... )
Value:
__VA_ARGS__

◆ CPP_PP_IIF_1

#define CPP_PP_IIF_1 ( TRUE,
... )
Value:
TRUE

◆ 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_PP_IS_PAREN

#define CPP_PP_IS_PAREN ( x)
Value:
CPP_PP_CHECK(CPP_PP_IS_PAREN_PROBE x)

◆ CPP_PP_IS_PAREN_PROBE

#define CPP_PP_IS_PAREN_PROBE ( ...)
Value:
CPP_PP_PROBE(~)

◆ CPP_PP_LBRACE

#define CPP_PP_LBRACE ( )
Value:
{

◆ CPP_PP_NOT

#define CPP_PP_NOT ( BIT)
Value:
CPP_PP_CAT_(CPP_PP_NOT_, BIT)

◆ CPP_PP_PROBE

#define CPP_PP_PROBE ( x)
Value:
x, 1,

◆ CPP_PP_PROBE_N

#define CPP_PP_PROBE_N ( x,
n )
Value:
x, n,

◆ CPP_PP_RBRACE

#define CPP_PP_RBRACE ( )
Value:
}

◆ CPP_PP_SECOND

#define CPP_PP_SECOND ( LIST)
Value:
CPP_PP_SECOND_ LIST

◆ CPP_PP_SECOND_

#define CPP_PP_SECOND_ ( ...)
Value:
CPP_PP_EXPAND

◆ CPP_requires

#define CPP_requires ( NAME,
REQS )
Value:
concept NAME = \
CPP_PP_CAT(CPP_REQUIRES_, REQS)

◆ CPP_REQUIRES_AUX_

#define CPP_REQUIRES_AUX_ ( ...)
Value:
{ __VA_ARGS__; }

INTERNAL ONLY.

◆ CPP_requires_ref

#define CPP_requires_ref ( NAME,
... )
Value:
NAME<__VA_ARGS__>

◆ CPP_REQUIRES_requires

#define CPP_REQUIRES_requires ( ...)
Value:
requires(__VA_ARGS__) CPP_REQUIRES_AUX_
#define CPP_REQUIRES_AUX_(...)
INTERNAL ONLY.
Definition concepts.hpp:474

INTERNAL ONLY.

◆ CPP_ret

#define CPP_ret ( ...)
Value:
__VA_ARGS__ CPP_PP_EXPAND

◆ CPP_template

#define CPP_template ( ...)
Value:
template<__VA_ARGS__> CPP_TEMPLATE_EXPAND_

◆ CPP_TEMPLATE_AUX_

#define CPP_TEMPLATE_AUX_ ( ...)
Value:
> CPP_PP_CAT( \
CPP_TEMPLATE_AUX_WHICH_(__VA_ARGS__,))(__VA_ARGS__)
#define CPP_TEMPLATE_AUX_WHICH_(FIRST,...)
INTERNAL ONLY.
Definition concepts.hpp:232
#define CPP_TEMPLATE_AUX_(...)
INTERNAL ONLY.
Definition concepts.hpp:226

INTERNAL ONLY.

◆ CPP_TEMPLATE_AUX_0

#define CPP_TEMPLATE_AUX_0 ( ...)
Value:
__VA_ARGS__

INTERNAL ONLY.

◆ CPP_TEMPLATE_AUX_1

#define CPP_TEMPLATE_AUX_1 ( DECL,
... )
Value:
CPP_concept CPP_CONCEPT_NAME_(DECL) = __VA_ARGS__
#define CPP_CONCEPT_NAME_(DECL)
INTERNAL ONLY.
Definition concepts.hpp:316

INTERNAL ONLY.

◆ CPP_TEMPLATE_AUX_WHICH_

#define CPP_TEMPLATE_AUX_WHICH_ ( FIRST,
... )
Value:
CPP_PP_EVAL( \
CPP_PP_CHECK, \
CPP_PP_CAT(CPP_TEMPLATE_PROBE_CONCEPT_, FIRST))

INTERNAL ONLY.

◆ CPP_template_def_sfinae

#define CPP_template_def_sfinae ( ...)
Value:
template<__VA_ARGS__ CPP_TEMPLATE_DEF_SFINAE_AUX_
#define CPP_TEMPLATE_DEF_SFINAE_AUX_(...)
INTERNAL ONLY.
Definition concepts.hpp:341

INTERNAL ONLY.

◆ 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_EXPAND_

#define CPP_TEMPLATE_EXPAND_ ( X,
Y )
Value:
X Y

◆ 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_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.

Variable Documentation

◆ and_v

template<bool... Bs>
bool concepts::and_v
constexpr
Initial value:
=
std::is_same<detail::bools<Bs..., true>, detail::bools<true, Bs...>>::value

◆ or_v

template<bool... Bs>
bool concepts::or_v
constexpr
Initial value:
=
! std::is_same<detail::bools<Bs..., false>, detail::bools<false, Bs...>>::value