Boost fusion problem

Hi guys,
We're trying out the latest version of Boost (1.61, migrating from 1.55)
and have some code calling the fusion library that now doesn't compile and
it's not obvious (to me at least) why. I've created a simple program
(below) to demonstrate the issue. As per the compile/run section below,
this compiles and runs with Boost 1.55, not with 1.61.
If anyone has any idea or pointers to what is wrong here I'd really
appreciate it. Sorry if this isn't the right forum for this kind of issue
too - if so please let me know how best to seek help on this.
Regards
Jess
******************** main.cpp
#include

On Tue, 24 May 2016 19:09:02 +1000
Jess Morecroft
Hi guys,
We're trying out the latest version of Boost (1.61, migrating from 1.55) and have some code calling the fusion library that now doesn't compile and it's not obvious (to me at least) why. I've created a simple program (below) to demonstrate the issue. As per the compile/run section below, this compiles and runs with Boost 1.55, not with 1.61.
If anyone has any idea or pointers to what is wrong here I'd really appreciate it. Sorry if this isn't the right forum for this kind of issue too - if so please let me know how best to seek help on this.
Regards Jess
This is a regression caused by the upgrades for C++11. Compiling in C++03 mode still works with Boost 1.61. The problem is the nested sequence, the new C++11 version is trying to unpack the inner sequence for a conversion move when it should be moving the entire inner sequence. The problem is caused by the [incorrect dispatch method][0] being selected. Little late for me to attempt a fix, but I should be able to do a bit later this week if no one else can. Lee [0]https://github.com/boostorg/fusion/blob/master/include/boost/fusion/containe...

Hi Lee,
We actually noticed that by changing the tuple to a (fusion) vector, it
just works. This was unexpected as we'd thought/read in the boost doc that
tuple was just effectively an alias for a vector, but apparently not. This
is good enough for us so no solution required beyond this.
Regards
Jess
On 25 May 2016 at 15:13, Lee Clagett
On Tue, 24 May 2016 19:09:02 +1000 Jess Morecroft
wrote: Hi guys,
We're trying out the latest version of Boost (1.61, migrating from 1.55) and have some code calling the fusion library that now doesn't compile and it's not obvious (to me at least) why. I've created a simple program (below) to demonstrate the issue. As per the compile/run section below, this compiles and runs with Boost 1.55, not with 1.61.
If anyone has any idea or pointers to what is wrong here I'd really appreciate it. Sorry if this isn't the right forum for this kind of issue too - if so please let me know how best to seek help on this.
Regards Jess
This is a regression caused by the upgrades for C++11. Compiling in C++03 mode still works with Boost 1.61. The problem is the nested sequence, the new C++11 version is trying to unpack the inner sequence for a conversion move when it should be moving the entire inner sequence. The problem is caused by the [incorrect dispatch method][0] being selected. Little late for me to attempt a fix, but I should be able to do a bit later this week if no one else can.
Lee
[0] https://github.com/boostorg/fusion/blob/master/include/boost/fusion/containe... _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- -- AE CAPITAL Suite 1, 2A River St, South Yarra, Melbourne, VIC 3141 Australia p +61 3 9020 7802 m +61 (0)401 254 350 AE Capital Pty Limited (ACN 153 242 865) is regulated by the Australian Securities & Investments Commission and is a Corporate Authorised Representative of JFM Pty Limited (ACN 125 150 656), holder of an Australian Financial Services Licence (AFSL 314585).

On Mon, 30 May 2016 11:52:09 +1000
Jess Morecroft
Hi Lee,
We actually noticed that by changing the tuple to a (fusion) vector, it just works. This was unexpected as we'd thought/read in the boost doc that tuple was just effectively an alias for a vector, but apparently not. This is good enough for us so no solution required beyond this.
Regards Jess
Yes I noticed this as well during my testing for a patch. In C++03 and C++11 `fusion::tuple` inherits from `fusion::vector`, so they are functionally identical but unique types. So copying/moving from tuple to vector (or vice-versa) triggers the "copy from another sequence type" code. You found a bug in that code for C++11, and while trying to identify a fix I found a similar bug in the C++03 version, and issues with the C++11 list too. Joel has [merged my fix][0] for your particular use case, and I hope to continue working on a fixes for the other cases too. Lee [0] https://github.com/boostorg/fusion/pull/132
participants (2)
-
Jess Morecroft
-
Lee Clagett