Defines | |
| #define | axiom_assert(expr) |
| Throws an axiom failure if expr is false. | |
| #define | ENABLE_IF(X...) typename = typename std::enable_if< ::catsfoot::eval< X >::value>::type |
| Enable function definition if concept is fulfilled. | |
| #define | ENABLE_IF_NOT(X...) typename = typename std::enable_if<!::catsfoot::eval< X >::value>::type |
| Enable function definition if concept has no model. | |
| #define | IF(X...) ::catsfoot::eval< X >::value |
| Tells whether a concept is fulfilled. | |
| #define | AXIOMS(X...) |
| Defines a list of axiom in a concept. | |
| #define | DEF_MEMBER_WRAPPER(X...) |
| Defines a wrapper for calling a member of a class. | |
| #define | DEF_STATIC_MEMBER_WRAPPER(X...) |
| Defines a wrapper for calling a static member of a class. | |
| #define | DEF_FUNCTION_WRAPPER(X...) |
| Defines a function wrapper for calling a function. | |
| #define axiom_assert | ( | expr | ) |
_catsfoot__test_axiom("<unknown>", \ "<unknown>", \ 0, \ expr)
Throws an axiom failure if expr is false.
| #define AXIOMS | ( | X... | ) |
static auto get_axioms() -> \ decltype(::catsfoot::details::zip_vec_tuple \ (::catsfoot::details::split_identifiers(#X), \ std::make_tuple(X))) { \ return ::catsfoot::details::zip_vec_tuple \ (::catsfoot::details::split_identifiers(#X), \ std::make_tuple(X)); \ }
Defines a list of axiom in a concept.
| #define DEF_FUNCTION_WRAPPER | ( | X... | ) |
struct function_##X { \ template <typename... U, \ typename Ret = \ decltype(X(std::declval<U>()...))> \ Ret operator()(U&&... u...) const { \ return X(std::forward<U>(u)...); \ } \ };
Defines a function wrapper for calling a function.
| #define DEF_MEMBER_WRAPPER | ( | X... | ) |
struct member_##X { \ template <typename T, typename... U, \ typename Ret = \ decltype(std::declval<T>() \ .X(std::declval<U>()...))> \ Ret operator()(T&& t, U&&... u...) const { \ return std::forward<T>(t).X(std::forward<U>(u)...); \ } \ };
Defines a wrapper for calling a member of a class.
It can be useful for such a case:
DEF_MEMBER_WRAPPER(foo); template <typename T, ENABLE_IF(callable<member_foo(T, int)>)> [...] t.foo(20);
| #define DEF_STATIC_MEMBER_WRAPPER | ( | X... | ) |
template <typename T> \ struct static_member_##X { \ template <typename... U, \ typename Ret = \ decltype(T::X(std::declval<U>()...))> \ Ret operator()(U&&... u...) const { \ return T::X(std::forward<U>(u)...); \ } \ };
Defines a wrapper for calling a static member of a class.
It can be useful for such a case:
DEF_MEMBER_WRAPPER(foo); template <typename T, ENABLE_IF(callable<static_member_foo<T>(int)>)> [...] T::foo(20);
| #define ENABLE_IF | ( | X... | ) | typename = typename std::enable_if< ::catsfoot::eval< X >::value>::type |
Enable function definition if concept is fulfilled.
It should be used in the parameter list a function template.
| #define ENABLE_IF_NOT | ( | X... | ) | typename = typename std::enable_if<!::catsfoot::eval< X >::value>::type |
Enable function definition if concept has no model.
It should be used in the parameter list a function template.
| #define IF | ( | X... | ) | ::catsfoot::eval< X >::value |
Tells whether a concept is fulfilled.
It makes a constant expression of type bool.