Boost logo

Boost Users :

From: Alban Linard (alban.linard_at_[hidden])
Date: 2008-02-26 16:35:32


Steven Watanabe wrote:

> AMDG
>
> Alban Linard wrote:
>
>>Hi,
>>
>>i am trying to build a recursive variant containing another variant, as
>>described in the following source code:
>>
>>#include <cstdlib>
>>#include <vector>
>>#include <string>
>>#include <boost/variant.hpp>
>>
>>typedef ::boost::variant
>> < int
>> , bool
>> >
>> first_variant;
>>
>>typedef ::boost::make_recursive_variant
>> < first_variant
>> , ::std::string
>> , ::std::vector< ::boost::recursive_variant_ >
>> >::type
>> second_variant;
>>
>>int main()
>>{
>> first_variant f(true);
>> second_variant s(f);
>> return EXIT_SUCCESS;
>>}
>>
>>It does not compile (g++-4.0 and g++-4.3). It seems that the
>>"first_variant" part of second_variant is not used.
>>Why this behavior ? Is there a workaround ?
>>
>
>
> This is a bug in boost::variant. You can fix it by changing line 101 of
> boost/variant/recursive_variant.hpp
> from
> typedef ::boost::variant< types > type;
> to
> typedef ::boost::variant< over_sequence<types> > type;
>
> In Christ,
> Steven Watanabe

Thank you very much!

Next step, i would like to store a container of first_variant instead of
   a single one.

#include <cstdlib>
#include <vector>
#include <boost/variant.hpp>

typedef ::boost::variant
         < int
         , bool
>
         first_variant;

typedef ::boost::make_recursive_variant
         < ::std::vector< first_variant >
         , ::std::vector< ::boost::recursive_variant_ >
>::type
         second_variant;

int main()
{
   ::std::vector< first_variant > f;
   second_variant s(f);
   return EXIT_SUCCESS;
}

This crashes, too. Again, did i use it wrong or is it another problem ?

Thanks,
Alban Linard


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