Boost logo

Boost Users :

Subject: [Boost-users] Set fusion::vector value with boost::shared_ptr
From: Stefan Troeger (stefantroeger_at_[hidden])
Date: 2012-04-15 10:30:51


Hello alltogether,

I've posted this already in Stackoverflow a week ago with no answer up to now,
so I thougth I try it here again.

I want to set a value in a fusion::vector at a specific location. This works
normaly very well with fusion::at_c(seq) = value, as at_c returns a reference
to the object at this position. However, this is not garanted, the
documentation only states about the return type: "In most cases, this is a
reference". I've encounterd a case where it is not a reference, when the
objects are of type boost::shared_ptr<anytype>. Therefore I cant set the
values as I'm only overriding a temporary. Minimal example:

struct Object1{};
struct Object2{};

typedef fusion::vector<boost::shared_ptr<Object1>, boost::shared_ptr<Object2>
> seq_type;

seq_type seq;
boost::shared_ptr<Object1> value(new Object1());
fusion::at_c<0>(seq) = value;

assert(fusion::at_c<0>(seq) ); //assert will be executed because the default
constructed empty pointer was not overridden with a valid one

BOOST_MPL_ASSERT(( boost::is_reference< result_of::at_c<seq_type, 0>::type >
)) //compilation fails because the returned type is not a reference

What is a valid alternative of setting the pointers in an fusion sequence? Any
help would be appreciated!

Thanks, Stefan


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