Rivet  3.1.4
TypeTraits.hh
1 // -*- C++ -*-
2 #ifndef RIVET_TypeTraits_HH
3 #define RIVET_TypeTraits_HH
4 
5 #include <type_traits>
6 
7 namespace Rivet {
8 
15 
17 
18  namespace SFINAE {
20  template <typename ...>
21  using void_t = void;
22  }
23 
24 
25  struct RefType { };
26 
27  struct PtrType { };
28 
29  template <typename T>
30  struct TypeTraits;
31 
32  template <typename U>
33  struct TypeTraits<const U&> {
34  typedef RefType ArgType;
35  };
36 
37  template <typename U>
38  struct TypeTraits<const U*> {
39  typedef PtrType ArgType;
40  };
41 
42 
43 
45  template <typename T, typename=void>
46  struct Derefable : std::false_type {};
47  //
48  template <typename T>
49  struct Derefable<T, SFINAE::void_t< decltype(*std::declval<T>())> > : std::true_type {};
50 
51 
53  // template <typename T, typename=void>
54  // struct Iterable : std::false_type {};
55  // //
56  // template <typename T>
57  // struct Iterable<T, SFINAE::void_t< decltype(*std::declval<T>())> > : std::true_type {};
58  template <typename T>
59  using ConstIterable = pretty_print::is_container<T>;
60 
61 
63 
64 }
65 
66 #endif
Definition: MC_Cent_pPb.hh:10