The Gaudi Framework  v30r2 (9eca68f7)
detected.h
Go to the documentation of this file.
1 #ifndef DETECTED_H
2 #define DETECTED_H
3 // implementation of Library Fundamentals TS V2 detected idiom,
4 // taken from http://en.cppreference.com/w/cpp/experimental/is_detected
5 // and http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4436.pdf
6 
7 namespace Gaudi
8 {
9  namespace cpp17
10  {
11  namespace details
12  {
13  template <typename...>
14  struct void_t_ {
15  using type = void;
16  };
17  template <typename... T>
18  using void_t = typename void_t_<T...>::type;
19 
21  template <typename Default, typename AlwaysVoid, template <typename...> class Op, typename... Args>
22  struct detector {
23  constexpr static bool value = false;
24  using type = Default;
25  };
26 
28  template <typename Default, template <typename...> class Op, typename... Args>
29  struct detector<Default, void_t<Op<Args...>>, Op, Args...> {
30  constexpr static bool value = true;
31  using type = Op<Args...>;
32  };
33  }
34 
35  template <template <class...> class Op, class... Args>
36  using is_detected = details::detector<void, void, Op, Args...>;
37 
38  template <template <class...> class Op, class... Args>
39  using detected_t = typename is_detected<Op, Args...>::type;
40 
41  // Op<Args...> if that is a valid type, otherwise Default.
42  template <typename Default, template <typename...> class Op, typename... Args>
43  using detected_or_t = typename details::detector<Default, void, Op, Args...>::type;
44  }
45 }
46 
47 #endif
typename is_detected< Op, Args... >::type detected_t
Definition: detected.h:39
typename void_t_< T... >::type void_t
Definition: detected.h:18
class MergingTransformer< Out(const vector_of_const_< In > void
Implementation of the detection idiom (negative case).
Definition: detected.h:22
static constexpr bool value
Definition: detected.h:23
Helper functions to set/get the application return code.
Definition: __init__.py:1
typename details::detector< Default, void, Op, Args... >::type detected_or_t
Definition: detected.h:43