diff options
Diffstat (limited to 'friendly_fusion.hpp')
| -rw-r--r-- | friendly_fusion.hpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/friendly_fusion.hpp b/friendly_fusion.hpp index b014bd8..09ec920 100644 --- a/friendly_fusion.hpp +++ b/friendly_fusion.hpp @@ -126,4 +126,40 @@ struct struct_member_name : private traits::is_sequence<T, false>, public boost: } +namespace utils { + +template<typename T, int I> +class DecayedTypeOfAtIndex { + typedef friendly_fusion::result_of::begin<T> begin; + typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it; + typedef friendly_fusion::result_of::deref<typename adv_it::type> deref; + typedef std::decay<typename deref::type> decayed; + +public: + typedef typename decayed::type type; +}; + +template<typename T, int I> +class RefTypeOfAtIndex { + typedef friendly_fusion::result_of::begin<T> begin; + typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it; + typedef friendly_fusion::result_of::deref<typename adv_it::type> deref; + +public: + typedef typename deref::type type; +}; + +template<typename T, int I> +class UnrefTypeOfAtIndex { + typedef friendly_fusion::result_of::begin<T> begin; + typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it; + typedef friendly_fusion::result_of::deref<typename adv_it::type> deref; + typedef std::remove_reference<typename deref::type> unrefed; + +public: + typedef typename unrefed::type type; +}; + +} + }
\ No newline at end of file |
