Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion] probably a bug in result_of::join
From: Christopher Schmidt (mr.chr.schmidt_at_[hidden])
Date: 2009-10-14 09:27:04


Yeah, this is a major issue of the current fusion implementation. The
result_of::-metafunctions do not regard that the actual functions take
const-qualified arguments only. On top of that the documentation is
outdated and misleading.

In your particular case

result_of::join< vector<> const, vector<> const>::type j = join(v1, v2);

should work fine.

My C++0x port of fusion introduces non-const arguments for the algorithm
functions and a new result_of::-concept which allows passing
(optionally) cv and ref qualified types.

-Christopher

jl schrieb:
> This is nearly a copy-paste from the doc (and agrees with intuition):
> #include <boost/fusion/algorithm/transformation/join.hpp>
> #include <boost/fusion/include/vector.hpp>
> #include <boost/fusion/include/join.hpp>
> void foo() {
> using namespace boost::fusion;
> vector<> v1, v2;
> result_of::join< vector<>, vector<> >::type j = join(v1, v2);
> }
> ...but it doesn't compile (msvc9, boost 1.40):
> c:\UserTemp\x54209\BoostTests\Any\main.cpp(20) : error C2440:
> 'initializing' : cannot convert from
> 'boost::fusion::result_of::join<LhSequence,RhSequence>::type' to
> 'boost::fusion::joint_view<Sequence1,Sequence2>'
> with
> [
> LhSequence=const boost::fusion::vector<>,
> RhSequence=const boost::fusion::vector<>
> ]
> and
> [
> Sequence1=boost::fusion::vector<>,
> Sequence2=boost::fusion::vector<>
> ]
> No constructor could take the source type, or constructor
> overload resolution was ambiguous
> J-L


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