31template <
bool B,
class T =
void>
32using EnableIf = std::enable_if<B, T>;
35template <
typename Base,
typename Derived>
36using IsBaseOf = std::is_base_of<Base, Derived>;
40using IsSigned = std::is_signed<T>;
42#define CHECK_TYPE_INTEGRAL(Type) \
44 std::is_integral<Type>::value, \
45 #Type " must be an integral type, consider adding MemberTraits" \
52 template <
class T,
class U>
53 struct IsSameSignedness
55 enum { value = (
static_cast<bool>(IsSigned<T>::value) ==
static_cast<bool>(IsSigned<U>::value)) };
60 struct HasMemberTraits
62 template<
typename U>
struct SFINAE {};
64 template<
typename U>
static int test(...);
65 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
70 struct HasValueStaticMember
72 template<
typename U,
typename U::Value (*)()>
struct SFINAE {};
74 template<
typename U>
static int test(...);
75 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
80 struct HasSerializeMember
82 template<
typename U,
void (U::*)(
void*) const noexcept>
struct SFINAE {};
84 template<
typename U>
static int test(...);
85 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
92 template<
typename U>
struct SFINAE {};
94 template<
typename U>
static int test(...);
95 enum { value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
100template <
typename Set,
typename NullValue>
101typename EnableIf<details::HasBitsMember<Set>::value,
bool>::type
102operator != (NullValue null, Set set)
noexcept
104 ONIXS_EURONEXT_OPTIQMDG_STATIC_ASSERT((
sizeof(
typename Set::Bits) ==
sizeof(
typename NullValue::Value)));
105 ONIXS_EURONEXT_OPTIQMDG_STATIC_ASSERT((details::IsSameSignedness<typename Set::Bits, typename NullValue::Value>::value));
107 return set.bits() != null;
111template <
class To,
class From>
114typename EnableIf<details::IsSameSignedness<To, From>::value, To>::type
115 numericCast(From from)
noexcept
118 static_cast<To
>(from);
120 assert(
static_cast<From
>(to) == from);
126template <
class To,
class From>
129typename EnableIf<!details::IsSameSignedness<To, From>::value, To>::type
130 numericCast(From from)
noexcept
133 static_cast<To
>(from);
135 assert(
static_cast<From
>(to) == from);
138 assert((to >
static_cast<To
>(0)) == (from >
static_cast<From
>(0)));
#define ONIXS_EURONEXT_OPTIQMDG_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_EURONEXT_OPTIQMDG_MESSAGING_NAMESPACE_END
#define ONIXS_EURONEXT_OPTIQMDG_PURE