//Prototype an implementation of mpl::vector using variadic templates. #ifndef __VARIADIC_TEMPLATES #error "compiler must implement variadic templates" #endif #include #include namespace boost { namespace mpl { template < typename... Args > struct vector { }; template < typename Sequence , long N > struct at_c ; template < typename Head , typename... Tail , long N > struct at_c < vector , N > : at_c, N-1> { }; template < typename Head , typename... Tail > struct at_c < vector , 0 > { typedef Head type ; }; }//exit mpl namespace }//exit boost namespace using namespace boost; template < unsigned I > struct A {}; typedef mpl::vector < A<0> , A<1> , A<2> > vec3 ; typedef mpl::at_c::type at_0 ; BOOST_MPL_ASSERT((is_same >)); typedef mpl::at_c::type at_1 ; BOOST_MPL_ASSERT((is_same >)); typedef mpl::at_c::type at_2 ; BOOST_MPL_ASSERT((is_same >));