|
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