00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef STATIC_AND_HH
00018 # define STATIC_AND_HH
00019
00020 namespace catsfoot {
00021
00022 namespace details {
00023
00024 template <typename... T>
00025 struct static_and;
00026
00028 template <typename T, typename U, bool = T::value>
00029 struct static_binary_and: public std::false_type {
00030 };
00031
00033 template <typename T, typename U>
00034 struct static_binary_and<T, U, true>: public U {
00035 };
00036
00038 template <typename F, typename... T>
00039 struct static_and<F, T...>: public static_binary_and<F, static_and<T...> > {
00040 };
00041
00043 template <>
00044 struct static_and<>: public std::true_type {
00045 };
00046 }
00047
00048 }
00049
00050 #endif