Boost logo

Boost :

Subject: [boost] [fusion] for_each
From: Christophe Henry (christophe.j.henry_at_[hidden])
Date: 2010-10-06 03:53:07


I think it's at least partly my mistake. It took me some time to
manage a limited example not compiling:

#include <boost/fusion/container/set.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/include/at_key.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/as_vector.hpp>

struct A
{
  int adata;
};
struct B
{
  int bdata;
};
struct C
{
  int cdata;
};

typedef boost::fusion::set<A, B, C> my_set_type;
typedef boost::fusion::vector<A, B> my_vector_type;

struct update
{
         update(my_set_type& to_overwrite_):to_overwrite(to_overwrite_){}
         template<typename T>
         void operator()(T& elt) const
         {
             boost::fusion::at_key<T>(to_overwrite)=elt;
         }
         my_set_type& to_overwrite;
};

int main()
{
  my_set_type my_set;
  my_vector_type my_vec;

  boost::fusion::for_each(boost::fusion::as_vector(my_vec),update(my_set));
}

Now it will compile if you replace boost::fusion::as_vector(my_vec) by
my_vec or T& by T const&.
Ok so it seems my problem description is wrong and I needed to know
that as_vector returns a const vector, right?

Thanks,
Christophe


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk