29#define ONIXS_CMEMDH_CHECK_TYPE_INTEGRAL(Type) \
30 static_assert(std::is_integral<Type>::value, #Type " must be an integral type, consider adding MemberTraits");
35 template <
class T,
class U>
36 struct IsSameSignedness
38 enum { value = (
static_cast<bool>(std::is_signed<T>::value) ==
static_cast<bool>(std::is_signed<U>::value)) };
45 template<
typename U>
struct SFINAE {};
47 template<
typename U>
static int test(...);
48 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
55 template<
typename U>
struct SFINAE {};
57 template<
typename U>
static int test(...);
58 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
65 enum { value = HasMantissa<T>::value && HasExponent<T>::value };
74 struct AreBothDecimals
76 enum { value = IsDecimal<Decimal1>::value && IsDecimal<Decimal2>::value };
81 struct HasMemberTraits
83 template<
typename U>
struct SFINAE {};
85 template<
typename U>
static int test(...);
86 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
91 struct HasValueStaticMember
93 template<
typename U,
typename U::Value (*)()>
struct SFINAE {};
95 template<
typename U>
static int test(...);
96 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
101 struct HasSerializeMember
103 template<
typename U,
void (U::*)(
void*) const noexcept>
struct SFINAE {};
105 template<
typename U>
static int test(...);
106 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
111template <
class To,
class From>
113typename std::enable_if<details::IsSameSignedness<To, From>::value, To>::type
114 numericCast(From from)
noexcept
116 const auto to =
static_cast<To
>(from);
118 assert(
static_cast<From
>(to) == from);
124template <
class To,
class From>
126typename std::enable_if<!details::IsSameSignedness<To, From>::value, To>::type
127 numericCast(From from)
noexcept
129 const auto to =
static_cast<To
>(from);
131 assert(
static_cast<From
>(to) == from);
134 assert((to >
static_cast<To
>(0)) == (from >
static_cast<From
>(0)));
#define ONIXS_CMEMDH_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_CMEMDH_MESSAGING_NAMESPACE_END
#define ONIXS_CMEMDH_FORCEINLINE