Mirror reflection library 0.5.13
|
00001 00011 #ifndef MIRROR_META_PROG_NIL_TERM_PACK_1105050854_HPP 00012 #define MIRROR_META_PROG_NIL_TERM_PACK_1105050854_HPP 00013 00014 #include <mirror/meta_prog/not.hpp> 00015 #include <mirror/meta_prog/only_if.hpp> 00016 #include <mirror/meta_prog/lambda.hpp> 00017 #include <mirror/meta_prog/nil_type.hpp> 00018 00019 MIRROR_NAMESPACE_BEGIN 00020 namespace mp { 00021 00022 template <typename T> 00023 struct is_pack_nil_type 00024 { 00025 typedef std::false_type type; 00026 }; 00027 00028 template <> 00029 struct is_pack_nil_type<nil_t> 00030 { 00031 typedef std::true_type type; 00032 }; 00033 00034 template <typename Range> 00035 struct remove_nil_types 00036 { 00037 typedef typename mirror::mp::only_if< 00038 Range, 00039 not_<is_pack_nil_type<arg<1> > > 00040 >::type type; 00041 }; 00042 00043 } // namespace mp 00044 MIRROR_NAMESPACE_END 00045 00046 #endif //include guard 00047