Boost logo

Boost Users :

From: Christian Henning (chhenning_at_[hidden])
Date: 2007-03-19 13:42:40


Hi there, I'm still playing with my vector of types example. Please
see what I'm doing:

#include <vector>

#include <boost/mpl/assert.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/list.hpp>
#include <boost/mpl/transform.hpp>

#include <boost/fusion/algorithm/transformation/transform.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/sequence/adapted/mpl.hpp>
#include <boost/fusion/sequence/container.hpp>
#include <boost/fusion/sequence/conversion/as_list.hpp>

using namespace std;
using namespace boost;

template <typename T>
struct add_vector
{
   typedef std::vector<T> type;
};

struct A;
struct B;
struct C;

struct create_empty_vec
{
   template< class T >
   void operator()( T& t ) const
   {
      return std::vector<T>();
   }
};

struct add_one
{
   template< class T >
   void operator()( T& vec ) const
   {
      vec.push_back( T() );
   }
};

int main()
{
   typedef mpl::list< A, B, C > _types_;
   typedef mpl::transform1< _types_, add_vector<mpl::_1> >::type
_mpl_list_of_vectors_;

   typedef fusion::result_of::as_list<_mpl_list_of_vectors_>::type
_fusion_list_of_vectors_;

   _fusion_list_of_vectors_ vectors;
   fusion::for_each( vectors, create_empty_vec() );

   return 0;
}

I have no idea why this code doesn't compile. My compiler (VC7.1) complaints:

test.cpp
C:\Program Files\Microsoft Visual Studio .NET
2003\Vc7\include\vector(795) : error C2036:
'std::vector<_Ty>::pointer' : unknown size
        with
        [
            _Ty=boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::quote1<add_vector,boost::mpl::void_>,boost::mpl::lambda<boost::mpl::_1,boost::mpl::void_>::result_>::apply<boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>::apply<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::a1,boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boos
t::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type>::a1,boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>::apply<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_
tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::a1,boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type
        ]
        C:\Program Files\Microsoft Visual Studio .NET
2003\Vc7\include\vector(791) : while compiling class-template member
function 'void std::vector<_Ty>::_Tidy(void)'
        with
        [
            _Ty=boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::quote1<add_vector,boost::mpl::void_>,boost::mpl::lambda<boost::mpl::_1,boost::mpl::void_>::result_>::apply<boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>::apply<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::a1,boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::m
pl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type>::a1,boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>::apply<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mp
l::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::a1,boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::bkwd_state3,boost::mpl::deref<boost::mpl::aux::reverse_fold_impl<3,boost::mpl::begin<_types_>::type,boost::mpl::end<_types_>::type,boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::state,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<_types_>::type,boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::operation>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::lambda<add_vector<boost::mpl::_1>>::type,boost::mpl::_2>>,boost::mpl::arg<1>>::iter2>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>::type

[snip]

Any help is appreciated,
Christian


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net