Re: [Boost-bugs] Fwd: [Boost C++ Libraries] #11211: Fusion example no longer compiles

Subject: Re: [Boost-bugs] Fwd: [Boost C++ Libraries] #11211: Fusion example no longer compiles
From: Damien Buhl (damien.buhl_at_[hidden])
Date: 2015-04-21 07:01:25


Hi Joel,

Thanks for forwarding.

Looks like the support for BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED was
added to DEFINE_STRUCT in a too strong way, which makes it impossible to
use non-constexpr enabled types (namely std::string).

I think the problem comes from the addition of BOOST_CONSTEXPR where
BOOST_FUSION_GPU_ENABLED already was.

In this commit
https://github.com/boostorg/fusion/commit/2114bfca6c8d5e4f7fe2439346e1feddfd550ea6

there is BOOST_CONSTEXPR added for the constructors and assignment
operators.

I think we have to remove the constexpr for this part, because we cannot
add the requirements that the types the users gives to DEFINE_STRUCT are
valid within constant expression.

It also didn't come out by unit-tests runs, because our test are only
done with int types. We have to add types which aren't constant-enabled
to the tests for DEFINE_STRUCT and by the way for ADAPT also.

I understand the idea behind adding BOOST_CONSTEXPR everywhere where
BOOST_FUSION_GPU_ENABLED was, but actually it's not the same : on GPU
there isn't any scenarii where one uses std::string I think, while it is
typical in normal execution platform, and by the way BOOST_CONSTEXPR
shouldn't be in this file.

I've pushed a small commit where it then compiles for me on clang + g++
with C++03,11,14 :
> https://github.com/boostorg/fusion/compare/boostorg:master...daminetreg:feature/fix-for-11211?expand=1

Cheers,

--
Damien Buhl
On 20/04/2015 21:18, Joel de Guzman wrote:
> Hello Kohei, Damien,
> 
> Uh oh. Do you know what's happening here?
> I'm getting:
> 
> Constexpr constructor never produces a constant expression
> 
> How did this slip?
> 
> -------- Forwarded Message --------
> Subject: [Boost C++ Libraries] #11211: Fusion example no longer compiles
> Date: Mon, 20 Apr 2015 19:01:29 -0000
> From: Boost C++ Libraries <noreply_at_[hidden]>
> CC: boost-bugs_at_[hidden]
> 
> #11211: Fusion example no longer compiles
> -----------------------------------------------------+---------------------
>  Reporter:  Adrián Etchevarne <adrian.etchevarne@…>  |      Owner:  djowel
>      Type:  Bugs                                     |     Status:  new
> Milestone:  To Be Determined                         |  Component:  fusion
>   Version:  Boost 1.58.0                             |   Severity:  Problem
>  Keywords:  fusion                                   |
> -----------------------------------------------------+---------------------
>  From the manual:
> 
>  {{{
> 
>  #include <string>
>  #include "boost/fusion/adapted/struct/define_struct.hpp"
> 
>  // demo::employee is a Fusion sequence
>  BOOST_FUSION_DEFINE_STRUCT(
>       (demo), employee,
>       (std::string, name)
>       (int, age))
> 
> 
>  int main()
>  {
>  }
> 
>  }}}
> 
>  It fails to compile with boost 1.58. With boost 1.57, compiles
>  successfully.
> 
>   g++ --std=c++11 test.cpp -I /home/saknussemm/downloads/boost_1_58_0
> 
>  clang fails with a similar error.
> 

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:18 UTC