//Purpose: // Test whether a function template can be specialized on fusion::list<>. // #include #include #include #include #include #include #include #include template < typename FusionSeq > unsigned seq_size ( FusionSeq const& a_seq ) ; template < typename IsEmpty , typename FusionSeq > struct seq_size_impl { static unsigned _( FusionSeq const& a_seq ) { return 1+seq_size(boost::fusion::pop_front(a_seq)); } }; template < typename FusionSeq > struct seq_size_impl < boost::mpl::true_ , FusionSeq > { static unsigned _( FusionSeq const& a_seq ) { return 0; } }; template < typename FusionSeq > unsigned seq_size ( FusionSeq const& a_seq ) { typedef seq_size_impl < typename boost::fusion::result_of::empty::type , FusionSeq > impl; return impl::_(a_seq); } int main(void) { typedef boost::fusion::list list_t; list_t list_v(0,'a'); unsigned list_v_size=seq_size(list_v); std::cout<<"list_v_size="<