00001
00002
00003 #ifndef DUNE_COMMON_TYPEUTILITIES_HH
00004 #define DUNE_COMMON_TYPEUTILITIES_HH
00005
00006 #include <cstddef>
00007 #include <type_traits>
00008 #include <tuple>
00009
00010
00011 namespace Dune {
00012
00029 template<class This, class... T>
00030 using disableCopyMove = typename std::enable_if<
00031 (not(std::is_same<This, typename std::tuple_element<0, std::tuple<typename std::decay<T>::type...> >::type >::value)
00032 and not(std::is_base_of<This, typename std::tuple_element<0, std::tuple<typename std::decay<T>::type...> >::type >::value)), int>::type;
00033
00034
00035
00058 template<std::size_t priority>
00059 struct PriorityTag : public PriorityTag<priority-1>
00060 {};
00061
00070 template<>
00071 struct PriorityTag<0>
00072 {};
00073
00074
00075
00076 }
00077
00078
00079
00080 #endif // DUNE_COMMON_TYPEUTILITIES_HH