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.