Go to the source code of this file.
#define TTK_DECLARE_CLASS_SIGNATURE |
( |
|
__trait_name__, |
|
|
|
__func_name__ |
|
) |
| |
Value:template <typename Void, typename Obj, typename Func> \
struct __trait_name__ : std::false_type {}; \
template <typename Obj, typename Func> \
struct __trait_name__<std::void_t<decltype(static_cast<Func Obj::*>(&Obj::__func_name__))>, Obj, Func> : std::true_type {}; \
template <typename Obj, typename Func> \
using __trait_name__##
Check = __trait_name__<void, Obj, Func>;
Definition at line 61 of file ttktraits.h.
#define TTK_DECLARE_GLOBAL_SIGNATURE |
( |
|
__trait_name__, |
|
|
|
__func_name__ |
|
) |
| |
Value:std::nullptr_t __func_name__(...); \
template <typename T> \
struct __trait_name__ \
{ \
template <typename U, U> struct helper; \
template <typename U> static std::uint8_t test(helper<U*, &__func_name__>*); \
template <typename U> static std::uint16_t test(...); \
static constexpr bool value = sizeof(test<T>(0)) == sizeof(std::uint8_t); \
}
Definition at line 50 of file ttktraits.h.
#define TTK_DECLARE_HAS_MEMBER |
( |
|
__trait_name__ | ) |
|
Value:template <
typename T,
typename... Args> \
struct has_member_##__trait_name__ \
{ \
private: \
template <typename U> \
static auto test(int)->decltype(std::declval<U>().__trait_name__(std::declval<Args>() ...), std::true_type()); \
template <typename U> \
static std::false_type test(...); \
public: \
static constexpr bool value = std::is_same<decltype(test<T>(0)), std::true_type>::value; \
}
Definition at line 23 of file ttktraits.h.