1 #ifndef __JLANG__JCOMPARISONAVAILABLE__
2 #define __JLANG__JCOMPARISONAVAILABLE__
14 namespace 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;
friend JNullType operator==(const T &first, const T &second)
Equal operator.
static auto first_type(U *) -> decltype(std::declval< typename U::first_type >())
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
static auto second_type(U *) -> decltype(std::declval< typename U::second_type >())
static const bool has_value_type
friend JNullType operator!=(const T &first, const T &second)
Not equal operator.
static auto value_type(U *) -> decltype(std::declval< typename U::value_type >())
do set_variable OUTPUT_DIRECTORY $WORKDIR T
Auxiliary class for no type definition.
T::second_type second_type
static const bool has_second_type
Template base class for data structures without equality capability.
static const bool has_first_type
Template definition of test availability of comparison operators.