#include #include #define FUSION_VECTOR_POINTER_TO_MEMBER_TYPE_IMPL(z,n,_) \ template \ struct vector_ptr_to_member_type > { typedef typename mpl::at_c::type Vec::*type; }; #define FUSION_VECTOR_POINTER_TO_MEMBER_IMPL(z,n,_) \ template \ typename mpl::at_c::type Vec::*vector_ptr_to_member_impl(mpl::int_) { return &Vec::m##n; } namespace boost { namespace fusish { template struct vector_ptr_to_member_type; BOOST_PP_REPEAT(20, FUSION_VECTOR_POINTER_TO_MEMBER_TYPE_IMPL, _) BOOST_PP_REPEAT(20, FUSION_VECTOR_POINTER_TO_MEMBER_IMPL, _) // should probably be metafunction template typename vector_ptr_to_member_type >::type vector_ptr_to_member() { return vector_ptr_to_member_impl(mpl::int_()); } }}