EventAnalysis  1.0.0
Traits.h
Go to the documentation of this file.
1 /*
2  * Traits.h
3  *
4  * Created on: 18 Dec 2017
5  * Author: Nicola Mori
6  */
7 
8 #ifndef TRAITS_H_
9 #define TRAITS_H_
10 
11 #include <list>
12 #include <vector>
13 
14 namespace EA {
15 // Traits for contained objects
16 template <template <typename> class test, typename T> struct smart_test : test<T> {};
17 template <template <typename> class test, typename T, typename A>
18 struct smart_test<test, std::vector<T, A>> : smart_test<test, typename std::decay<T>::type> {};
19 template <template <typename> class test, typename T, typename A>
20 struct smart_test<test, std::list<T, A>> : smart_test<test, typename std::decay<T>::type> {};
21 
22 template <typename T>
24 
25 // Logical operators (see http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html)
26 template <class...> struct or_; // not defined
27 template <> struct or_<> : std::false_type {};
28 template <class B1, class B2> struct or_<B1, B2> : std::conditional_t<B1::value, B1, B2> {};
29 
30 template <class...> struct and_; // not defined
31 template <> struct and_<> : std::true_type {};
32 template <class B1, class B2> struct and_<B1, B2> : std::conditional_t<B1::value, B2, B1> {};
33 
34 template <class T> struct not_ : std::conditional_t<T::value, std::false_type, std::true_type> {};
35 
36 } // namespace EA
37 #endif /* TRAITS_H_ */
Definition: Traits.h:16
Definition: Traits.h:32
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
Definition: Traits.h:30
Definition: Traits.h:31
Definition: Traits.h:27
Definition: Traits.h:26
Definition: Traits.h:34
Definition: Traits.h:28