1#ifndef __JLANG__JCOMPARISONAVAILABLE__
2#define __JLANG__JCOMPARISONAVAILABLE__
14namespace JPP {
using namespace JLANG; }
21 namespace JLANG_LOCAL {
26 template<
class U>
static auto first_type(U*) ->
decltype(std::declval<typename U::first_type>());
27 template<
typename>
static auto first_type(...) -> std::false_type;
29 template<
class U>
static auto second_type(U*) ->
decltype(std::declval<typename U::second_type>());
30 template<
typename>
static auto second_type(...) -> std::false_type;
32 template<
class U>
static auto value_type(U*) ->
decltype(std::declval<typename U::value_type>());
33 template<
typename>
static auto value_type(...) -> std::false_type;
36 static const bool has_first_type = !std::is_same<std::false_type, decltype(first_type<T> (0))>::value;
37 static const bool has_second_type = !std::is_same<std::false_type, decltype(second_type<T>(0))>::value;
38 static const bool has_value_type = !std::is_same<std::false_type, decltype(value_type<T> (0))>::value;
56 template<
class U>
static auto eq(U*) ->
decltype(std::declval<U>() == std::declval<U>());
57 template<
class U>
static auto ne(U*) ->
decltype(std::declval<U>() != std::declval<U>());
58 template<
class U>
static auto lt(U*) ->
decltype(std::declval<U>() < std::declval<U>());
59 template<
class U>
static auto gt(U*) ->
decltype(std::declval<U>() > std::declval<U>());
60 template<
class U>
static auto le(U*) ->
decltype(std::declval<U>() <= std::declval<U>());
61 template<
class U>
static auto ge(U*) ->
decltype(std::declval<U>() >= std::declval<U>());
63 template<
typename>
static auto eq(...) -> std::false_type;
64 template<
typename>
static auto ne(...) -> std::false_type;
65 template<
typename>
static auto lt(...) -> std::false_type;
66 template<
typename>
static auto gt(...) -> std::false_type;
67 template<
typename>
static auto le(...) -> std::false_type;
68 template<
typename>
static auto ge(...) -> std::false_type;
71 static const bool has_eq = std::is_same<bool, decltype(eq<T>(0))>::value;
72 static const bool has_ne = std::is_same<bool, decltype(ne<T>(0))>::value;
73 static const bool has_lt = std::is_same<bool, decltype(lt<T>(0))>::value;
74 static const bool has_gt = std::is_same<bool, decltype(gt<T>(0))>::value;
75 static const bool has_le = std::is_same<bool, decltype(le<T>(0))>::value;
76 static const bool has_ge = std::is_same<bool, decltype(ge<T>(0))>::value;
static auto le(U *) -> decltype(std::declval< U >()<=std::declval< U >())
static auto eq(...) -> std::false_type
static auto gt(...) -> std::false_type
static auto gt(U *) -> decltype(std::declval< U >() > std::declval< U >())
static auto ne(U *) -> decltype(std::declval< U >() !=std::declval< U >())
static auto ge(...) -> std::false_type
static auto eq(U *) -> decltype(std::declval< U >()==std::declval< U >())
static auto le(...) -> std::false_type
static auto ge(U *) -> decltype(std::declval< U >() >=std::declval< U >())
static auto ne(...) -> std::false_type
static auto lt(...) -> std::false_type
static auto lt(U *) -> decltype(std::declval< U >()< std::declval< U >())
T::second_type second_type
Template definition of test availability of comparison operators.
Template base class for data structures without equality capability.
friend JNullType operator!=(const T &first, const T &second)
Not equal operator.
friend JNullType operator==(const T &first, const T &second)
Equal operator.
static const bool has_second_type
static auto first_type(...) -> std::false_type
static const bool has_value_type
static const bool has_first_type
static auto second_type(U *) -> decltype(std::declval< typename U::second_type >())
static auto value_type(...) -> std::false_type
static auto second_type(...) -> std::false_type
static auto value_type(U *) -> decltype(std::declval< typename U::value_type >())
static auto first_type(U *) -> decltype(std::declval< typename U::first_type >())
Auxiliary classes and methods for language specific functionality.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary class for no type definition.