Mirror reflection library 0.5.13
|
00001 00012 #ifndef MIRROR_META_PROG_PREPEND_1011291729_HPP 00013 #define MIRROR_META_PROG_PREPEND_1011291729_HPP 00014 00015 00016 #include <mirror/meta_prog/range.hpp> 00017 00018 MIRROR_NAMESPACE_BEGIN 00019 namespace mp { 00020 00021 #ifdef MIRROR_DOCUMENTATION_ONLY 00022 00023 00029 template <typename T, class RangeToModify> 00030 struct prepend 00031 { 00032 typedef Range type; 00033 }; 00034 #endif 00035 00036 template <typename T, typename ... P> 00037 struct prepend<T, range<P...> > 00038 { 00039 typedef range<T, P...> type; 00040 }; 00041 00042 template <typename T, typename X> 00043 struct prepend 00044 { 00045 MIRROR_ASSERT_RETURNS_RANGE(X); 00046 typedef typename prepend<T, typename X::type>::type type; 00047 }; 00048 00049 00050 } // namespace mp 00051 MIRROR_NAMESPACE_END 00052 00053 #endif //include guard 00054