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

Classes

struct  concepts::detail::and_< T, U >
 
struct  concepts::detail::and_< T, U >
 
struct  concepts::detail::bools<... >
 
struct  concepts::detail::identity<... >
 
struct  concepts::detail::Nil
 
struct  concepts::detail::not_< T >
 
struct  concepts::is_satisfied_by< Concept, Args >
 
struct  concepts::tag< Concept, Base >
 

Macros

#define CPP_assert(...)
 
#define CPP_assert_msg   static_assert
 
#define CPP_auto_fun(X)   X CPP_AUTO_FUN_IMPL_
 
#define CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_(...)
 
#define CPP_AUTO_FUN_IMPL_(...)   (__VA_ARGS__) CPP_AUTO_FUN_RETURNS_
 
#define CPP_AUTO_FUN_RETURNS_(...)   CPP_AUTO_FUN_SELECT_RETURNS_(__VA_ARGS__,)(__VA_ARGS__) \
 
#define CPP_AUTO_FUN_RETURNS_CONST_0(...)
 
#define CPP_AUTO_FUN_RETURNS_CONST_1(...)   __VA_ARGS__ CPP_AUTO_FUN_RETURNS_CONST_0 \
 
#define CPP_AUTO_FUN_RETURNS_CONST_2(...)   CPP_PP_CAT(CPP_PP_EAT_MUTABLE_, __VA_ARGS__) CPP_AUTO_FUN_RETURNS_CONST_0
 
#define CPP_AUTO_FUN_RETURNS_return
 
#define CPP_AUTO_FUN_SELECT_RETURNS_(MAYBE_CONST, ...)
 
#define CPP_broken_friend_ret(...)   __VA_ARGS__ CPP_PP_EXPAND \
 
#define CPP_ctor(TYPE)   TYPE CPP_CTOR_IMPL_1_
 
#define CPP_CTOR_IMPL_1_(...)   (__VA_ARGS__) CPP_PP_EXPAND \
 
#define CPP_ctor_sfinae(TYPE)   TYPE CPP_CTOR_SFINAE_IMPL_1_
 
#define CPP_CTOR_SFINAE_EAT_NOEXCEPT_noexcept(...)
 
#define CPP_CTOR_SFINAE_IMPL_1_(...)
 
#define CPP_CTOR_SFINAE_MAKE_PROBE(FIRST, ...)   CPP_PP_CAT(CPP_CTOR_SFINAE_PROBE_NOEXCEPT_, FIRST) \
 
#define CPP_CTOR_SFINAE_PROBE_NOEXCEPT_noexcept   CPP_PP_PROBE(~) \
 
#define CPP_CTOR_SFINAE_REQUIRES(...)
 
#define CPP_CTOR_SFINAE_REQUIRES_0(...)
 
#define CPP_CTOR_SFINAE_REQUIRES_1(...)
 
#define CPP_CTOR_SFINAE_SHOW_NOEXCEPT_noexcept(...)   noexcept(__VA_ARGS__) CPP_PP_EAT CPP_PP_LPAREN \
 
#define CPP_CXX_CONCEPTS   201800L
 
#define CPP_CXX_VA_OPT   0
 
#define CPP_def(DECL, ...)
 
#define CPP_EXPLICIT   explicit
 
#define CPP_fun(X)   X CPP_FUN_IMPL_1_
 
#define CPP_FUN_IMPL_1_(...)
 
#define CPP_member
 
#define CPP_member_sfinae   CPP_broken_friend_member \
 
#define CPP_PP_AUX_template(...)
 
#define CPP_PP_CAT(X, ...)   CPP_PP_CAT_(X, __VA_ARGS__)
 
#define CPP_PP_CAT2(X, ...)   CPP_PP_CAT2_(X, __VA_ARGS__)
 
#define CPP_PP_CAT2_(X, ...)   X ## __VA_ARGS__
 
#define CPP_PP_CAT_(X, ...)   X ## __VA_ARGS__
 
#define CPP_PP_CHECK(...)   CPP_PP_CHECK_N(__VA_ARGS__, 0,)
 
#define CPP_PP_CHECK_N(x, n, ...)   n
 
#define CPP_PP_COMMA()   ,
 
#define CPP_PP_COMMA_IIF(X)   CPP_PP_IIF(X)(CPP_PP_EMPTY, CPP_PP_COMMA)() \
 
#define CPP_PP_COUNT(...)
 
#define CPP_PP_COUNT_( _1, _2, _3, _4, _5, _6, _7, _8, _9, _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_DECL_DEF(TPARAM, NAME, ...)
 
#define CPP_PP_DECL_DEF_0(TPARAM, NAME, ...)
 
#define CPP_PP_DECL_DEF_1(TPARAM, NAME, ...)
 
#define CPP_PP_DECL_DEF_IMPL(TPARAM, NAME, ARGS, ...)
 
#define CPP_PP_DECL_DEF_NAME(...)   CPP_PP_CAT(CPP_PP_DEF_, __VA_ARGS__), \
 
#define CPP_PP_DEF_bool
 
#define CPP_PP_DEF_class
 
#define CPP_PP_DEF_concept
 
#define CPP_PP_DEF_DECL_template(...)   template(__VA_ARGS__), \
 
#define CPP_PP_DEF_IMPL(REQUIRES, ...)
 
#define CPP_PP_DEF_IMPL_0(...)   __VA_ARGS__ \
 
#define CPP_PP_DEF_IMPL_1(...)   CPP_PP_CAT(CPP_PP_DEF_IMPL_1_, __VA_ARGS__) \
 
#define CPP_PP_DEF_IMPL_1_requires   requires CPP_PP_DEF_IMPL_1_REQUIRES \
 
#define CPP_PP_DEF_IMPL_1_REQUIRES(...)   (__VA_ARGS__) CPP_PP_DEF_IMPL_1_REQUIRES_BODY \
 
#define CPP_PP_DEF_IMPL_1_REQUIRES_BODY(...)   { __VA_ARGS__; } \
 
#define CPP_PP_DEF_IMPL_IS_PAREN_0(REQUIRES)
 
#define CPP_PP_DEF_IMPL_IS_PAREN_1(REQUIRES)   CPP_PP_DEF_IMPL_0 \
 
#define CPP_PP_DEF_int
 
#define CPP_PP_DEF_size_t
 
#define CPP_PP_DEF_template(...)   template<__VA_ARGS__> \
 
#define CPP_PP_DEF_typename
 
#define CPP_PP_DEF_unsigned
 
#define CPP_PP_EAT(...)
 
#define CPP_PP_EAT_MUTABLE_mutable
 
#define CPP_PP_EMPTY()
 
#define CPP_PP_EVAL(X, ...)   X(__VA_ARGS__)
 
#define CPP_PP_EVAL2(X, ...)   X(__VA_ARGS__)
 
#define CPP_PP_EXPAND(...)   __VA_ARGS__
 
#define CPP_PP_IGNORE_CXX2A_COMPAT_BEGIN
 
#define CPP_PP_IGNORE_CXX2A_COMPAT_END
 
#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_IS_NOT_EMPTY(...)
 
#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_PP_LBRACE()   {
 
#define CPP_PP_LPAREN   (
 
#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_PROBE(x)   x, 1,
 
#define CPP_PP_PROBE_CONST_MUTABLE_PROBE_const   CPP_PP_PROBE_N(~, 1)
 
#define CPP_PP_PROBE_CONST_MUTABLE_PROBE_mutable   CPP_PP_PROBE_N(~, 2)
 
#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)   x, n,
 
#define CPP_PP_RBRACE()   }
 
#define CPP_PP_REQUIRES_PROBE_requires   CPP_PP_PROBE(~) \
 
#define CPP_PP_TPARAM_1(_1)   CPP_PP_CAT2(CPP_PP_DEF_, _1)
 
#define CPP_PP_TPARAM_2(_1, ...)   CPP_PP_CAT2(CPP_PP_DEF_, _1), CPP_PP_TPARAM_1(__VA_ARGS__)
 
#define CPP_PP_TPARAM_3(_1, ...)   CPP_PP_CAT2(CPP_PP_DEF_, _1), CPP_PP_TPARAM_2(__VA_ARGS__)
 
#define CPP_PP_TPARAM_4(_1, ...)   CPP_PP_CAT2(CPP_PP_DEF_, _1), CPP_PP_TPARAM_3(__VA_ARGS__)
 
#define CPP_PP_TPARAM_5(_1, ...)   CPP_PP_CAT2(CPP_PP_DEF_, _1), CPP_PP_TPARAM_4(__VA_ARGS__)
 
#define CPP_ret(...)   __VA_ARGS__ CPP_PP_EXPAND \
 
#define CPP_template(...)   template<__VA_ARGS__> CPP_PP_EXPAND \
 
#define CPP_template_def   CPP_template \
 
#define CPP_template_def_sfinae(...)   template<__VA_ARGS__ CPP_TEMPLATE_DEF_SFINAE_AUX_ \
 
#define CPP_TEMPLATE_DEF_SFINAE_AUX_(...)
 
#define CPP_template_sfinae(...)   template<__VA_ARGS__ CPP_TEMPLATE_SFINAE_AUX_ \
 
#define CPP_TEMPLATE_SFINAE_AUX_(...)
 
#define CPP_TEMPLATE_SFINAE_AUX_3_requires
 

Typedefs

template<bool B>
using concepts::bool_ = std::integral_constant< bool, B >
 
template<typename T , bool Enable>
using concepts::detail::enable_if_t = meta::invoke< identity< std::enable_if_t< Enable > >, T >
 
template<typename T >
using concepts::detail::remove_cvref_t = typename std::remove_cv< typename std::remove_reference< T >::type >::type
 
template<typename Concepts , typename... Ts>
using concepts::tag_of = meta::reverse_fold< meta::find_if< Concepts, meta::bind_back< meta::quote< is_satisfied_by >, Ts... > >, meta::nil_, meta::flip< meta::quote< tag > >>
 
using concepts::detail::xNil = Nil
 

Functions

constexpr bool concepts::detail::CPP_false (Nil)
 
 concepts::detail::CPP_PP_CAT (CPP_PP_DEF_, template(typename T, typename U)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(bool B)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename... Args)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(class T, template< typename... > class Trait, typename... Args)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename A, typename B)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename From, typename To)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename T, typename U)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename T)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 concepts::defs::CPP_PP_CAT (CPP_PP_DEF_, template(typename T, typename... Args)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
template<typename >
constexpr bool concepts::detail::requires_ ()
 

Variables

template<bool... Bs>
constexpr bool concepts::and_v
 
concept concepts::defs::assignable_from = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( requires (T t, U &&u) ( t = (U &&) u, requires_<same_as<T, decltype(t = (U &&) u)>> ) && std::is_lvalue_reference<T>::value )( requires (T t, U &&u) ( t = (U &&) u, requires_<same_as<T, decltype(t = (U &&) u)>> ) && std::is_lvalue_reference<T>::value )
 
concept concepts::defs::common_reference_with = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( same_as<common_reference_t<T )( same_as<common_reference_t<T, U>, common_reference_t<U, T>> && convertible_to<T, common_reference_t<T, U>> && convertible_to<U, common_reference_t<T, U>> )
 
concept concepts::defs::common_with = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( same_as<common_type_t<T )( same_as<common_type_t<T, U>, common_type_t<U, T>> && convertible_to<T, common_type_t<T, U>> && convertible_to<U, common_type_t<T, U>> && common_reference_with< typename std::add_lvalue_reference<T const>::type, typename std::add_lvalue_reference<U const>::type> && common_reference_with< typename std::add_lvalue_reference<common_type_t<T, U>>::type, common_reference_t< typename std::add_lvalue_reference<T const>::type, typename std::add_lvalue_reference<U const>::type>> )
 
concept concepts::defs::constructible_from = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( destructible<T> && std::is_constructible< T )( destructible<T> && std::is_constructible< T, Args... >::value )
 
concept concepts::defs::convertible_to = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( implicitly_convertible_to<From )( implicitly_convertible_to<From, To> && explicitly_convertible_to<From, To> )
 
concept concepts::defs::copy_constructible = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( move_constructible<T> && constructible_from<T )( move_constructible<T> && constructible_from<T, T &> && constructible_from<T, T const &> && constructible_from<T, T const> && convertible_to<T &, T> && convertible_to<T const &, T> && convertible_to<T const, T> )
 
concept concepts::defs::copyable = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( copy_constructible<T> && movable<T> && assignable_from<T & )( copy_constructible<T> && movable<T> && assignable_from<T &, T const &> )
 
concept concepts::defs::default_constructible = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( constructible_from<T> )( constructible_from<T> )
 
concept concepts::defs::derived_from = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( std::is_base_of< U )( std::is_base_of< U, T >::value && convertible_to<T const volatile *, U const volatile *> )
 
concept concepts::defs::destructible = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( std::is_nothrow_destructible<T>::value )( std::is_nothrow_destructible<T>::value )
 
concept concepts::defs::equality_comparable = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( detail::weakly_equality_comparable_with_<T )( detail::weakly_equality_comparable_with_<T, T> )
 
concept concepts::defs::equality_comparable_with = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( equality_comparable<T> && equality_comparable<U> && detail::weakly_equality_comparable_with_<T )( 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>> && equality_comparable< common_reference_t<detail::as_cref_t<T>, detail::as_cref_t<U>>> )
 
concept concepts::defs::integral = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( std::is_integral<T>::value )( std::is_integral<T>::value )
 
concept concepts::defs::is_true = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( B )( B )
 
concept concepts::defs::movable = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( std::is_object<T>::value && move_constructible<T> && assignable_from<T & )( std::is_object<T>::value && move_constructible<T> && assignable_from<T &, T> && swappable<T> )
 
concept concepts::defs::move_constructible = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( constructible_from<T )( constructible_from<T, T> && convertible_to<T, T> )
 
template<bool... Bs>
constexpr bool concepts::or_v
 
concept concepts::defs::regular = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( semiregular<T> && equality_comparable<T> )( semiregular<T> && equality_comparable<T> )
 
template<bool B>
constexpr ::concepts::detail::enable_if_t< int, B > concepts::requires_ = 0
 
concept concepts::defs::same_as = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( std::is_same< A )( std::is_same< A, B >::value && std::is_same< B, A >::value )
 
concept concepts::defs::satisfies = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( static_cast<bool>(Trait<T, Args...>::type::value) )( static_cast<bool>(Trait<T, Args...>::type::value) )
 
concept concepts::defs::semiregular = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( copyable<T> && default_constructible<T> )( copyable<T> && default_constructible<T> )
 
concept concepts::defs::signed_integral = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( integral<T> && std::is_signed<T>::value )( integral<T> && std::is_signed<T>::value )
 
concept concepts::defs::swappable = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( requires (T &t, T &u) ( concepts::swap(t, u) ) )( requires (T &t, T &u) ( concepts::swap(t, u) ) )
 
concept concepts::defs::swappable_with = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( 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) ) && common_reference_with<detail::as_cref_t<T> )( 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) ) && common_reference_with<detail::as_cref_t<T>, detail::as_cref_t<U>> )
 
concept concepts::defs::totally_ordered = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( requires (detail::as_cref_t<T> t, detail::as_cref_t<T> u) ( t < u ? 1 : 0, t > u ? 1 : 0, u <= t ? 1 : 0, u >= t ? 1 : 0 ) && equality_comparable<T> )( requires (detail::as_cref_t<T> t, detail::as_cref_t<T> u) ( t < u ? 1 : 0, t > u ? 1 : 0, u <= t ? 1 : 0, u >= t ? 1 : 0 ) && equality_comparable<T> )
 
concept concepts::defs::totally_ordered_with = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( requires (detail::as_cref_t<T> t, detail::as_cref_t<U> u) ( t < u ? 1 : 0, t > u ? 1 : 0, t <= u ? 1 : 0, t >= u ? 1 : 0, u < t ? 1 : 0, u > t ? 1 : 0, u <= t ? 1 : 0, u >= t ? 1 : 0 ) && totally_ordered<T> && totally_ordered<U> && equality_comparable_with<T )( requires (detail::as_cref_t<T> t, detail::as_cref_t<U> u) ( t < u ? 1 : 0, t > u ? 1 : 0, t <= u ? 1 : 0, t >= u ? 1 : 0, u < t ? 1 : 0, u > t ? 1 : 0, u <= t ? 1 : 0, u >= t ? 1 : 0 ) && totally_ordered<T> && totally_ordered<U> && equality_comparable_with<T, U> && common_reference_with<detail::as_cref_t<T>, detail::as_cref_t<U>> && totally_ordered< common_reference_t<detail::as_cref_t<T>, detail::as_cref_t<U>>> )
 
concept concepts::defs::type = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( true )( true )
 
concept concepts::defs::unsigned_integral = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( integral<T> && !signed_integral<T> )( integral<T> && !signed_integral<T> )
 
concept concepts::detail::weakly_equality_comparable_with_ = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( requires (detail::as_cref_t<T> t, detail::as_cref_t<U> u) ( (t == u) ? 1 : 0, (t != u) ? 1 : 0, (u == t) ? 1 : 0, (u != t) ? 1 : 0 ) )( requires (detail::as_cref_t<T> t, detail::as_cref_t<U> u) ( (t == u) ? 1 : 0, (t != u) ? 1 : 0, (u == t) ? 1 : 0, (u != t) ? 1 : 0 ) )
 

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__); } \

◆ CPP_AUTO_FUN_RETURNS_CONST_0

#define CPP_AUTO_FUN_RETURNS_CONST_0 (   ...)
Value:
CPP_PP_EVAL(CPP_AUTO_FUN_DECLTYPE_NOEXCEPT_, \
CPP_PP_CAT(CPP_AUTO_FUN_RETURNS_, __VA_ARGS__)) \

◆ CPP_AUTO_FUN_SELECT_RETURNS_

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

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

◆ CPP_CTOR_SFINAE_REQUIRES

#define CPP_CTOR_SFINAE_REQUIRES (   ...)
Value:
CPP_PP_CAT(CPP_CTOR_SFINAE_REQUIRES_, \
CPP_PP_CHECK(CPP_CTOR_SFINAE_MAKE_PROBE(__VA_ARGS__,)))(__VA_ARGS__) \

◆ CPP_CTOR_SFINAE_REQUIRES_0

#define CPP_CTOR_SFINAE_REQUIRES_0 (   ...)
Value:
::concepts::detail::enable_if_t< \
CPP_false(::concepts::detail::xNil{}) || \
static_cast<bool>( \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__))> = {}) \
Definition: concepts.hpp:766

◆ CPP_CTOR_SFINAE_REQUIRES_1

#define CPP_CTOR_SFINAE_REQUIRES_1 (   ...)
Value:
::concepts::detail::enable_if_t< \
CPP_false(::concepts::detail::xNil{}) || \
static_cast<bool>(CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, CPP_PP_CAT( \
CPP_CTOR_SFINAE_EAT_NOEXCEPT_, __VA_ARGS__)))> = {}) \
CPP_PP_EXPAND( \
CPP_PP_CAT(CPP_CTOR_SFINAE_SHOW_NOEXCEPT_, __VA_ARGS__))) \
Definition: concepts.hpp:766

◆ CPP_def

#define CPP_def (   DECL,
  ... 
)
Value:
CPP_PP_EVAL( \
CPP_PP_DECL_DEF, \
CPP_PP_CAT(CPP_PP_DEF_DECL_, DECL), \
__VA_ARGS__) \

◆ CPP_FUN_IMPL_1_

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

◆ CPP_PP_AUX_template

#define CPP_PP_AUX_template (   ...)
Value:
CPP_PP_CAT2( \
CPP_PP_TPARAM_, \
CPP_PP_COUNT(__VA_ARGS__))(__VA_ARGS__) \

◆ CPP_PP_COUNT

#define CPP_PP_COUNT (   ...)
Value:
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_DECL_DEF

#define CPP_PP_DECL_DEF (   TPARAM,
  NAME,
  ... 
)
Value:
CPP_PP_CAT(CPP_PP_DECL_DEF_, CPP_PP_IS_PAREN(NAME))( \
TPARAM, \
NAME, \
__VA_ARGS__) \

◆ CPP_PP_DECL_DEF_0

#define CPP_PP_DECL_DEF_0 (   TPARAM,
  NAME,
  ... 
)
Value:
CPP_PP_DECL_DEF_IMPL( \
TPARAM, \
CPP_PP_CAT(CPP_PP_DEF_, NAME), \
(CPP_PP_CAT(CPP_PP_AUX_, TPARAM)), \
__VA_ARGS__) \

◆ CPP_PP_DECL_DEF_1

#define CPP_PP_DECL_DEF_1 (   TPARAM,
  NAME,
  ... 
)
Value:
CPP_PP_EVAL2( \
CPP_PP_DECL_DEF_IMPL, \
TPARAM, \
CPP_PP_DECL_DEF_NAME NAME, \
__VA_ARGS__) \

◆ CPP_PP_DECL_DEF_IMPL

#define CPP_PP_DECL_DEF_IMPL (   TPARAM,
  NAME,
  ARGS,
  ... 
)
Value:
CPP_PP_CAT(CPP_PP_DEF_, TPARAM) \
META_CONCEPT NAME = CPP_PP_DEF_IMPL(__VA_ARGS__,)(__VA_ARGS__) \

◆ CPP_PP_DEF_IMPL

#define CPP_PP_DEF_IMPL (   REQUIRES,
  ... 
)
Value:
CPP_PP_CAT( \
CPP_PP_DEF_IMPL_IS_PAREN_, \
CPP_PP_IS_PAREN(REQUIRES))(REQUIRES) \

◆ CPP_PP_DEF_IMPL_IS_PAREN_0

#define CPP_PP_DEF_IMPL_IS_PAREN_0 (   REQUIRES)
Value:
CPP_PP_CAT( \
CPP_PP_DEF_IMPL_, \
CPP_PP_CHECK(CPP_PP_CAT(CPP_PP_REQUIRES_PROBE_, REQUIRES))) \

◆ CPP_PP_IS_NOT_EMPTY

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

◆ CPP_TEMPLATE_DEF_SFINAE_AUX_

#define CPP_TEMPLATE_DEF_SFINAE_AUX_ (   ...)
Value:
, \
bool CPP_false_, \
::concepts::detail::enable_if_t<int, \
static_cast<bool>( \
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__)) || \
CPP_false_>> \

◆ CPP_TEMPLATE_SFINAE_AUX_

#define CPP_TEMPLATE_SFINAE_AUX_ (   ...)
Value:
, \
bool CPP_false_ = false, \
::concepts::detail::enable_if_t<int, \
static_cast<bool>(\
CPP_PP_CAT(CPP_TEMPLATE_SFINAE_AUX_3_, __VA_ARGS__)) || \
CPP_false_> = 0> \

Variable Documentation

◆ and_v

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

◆ or_v

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