$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Nindi Singh (nindi73_at_[hidden])
Date: 2006-07-01 12:53:40
I sort of guessed that this implicit conversion was taking place ... but unfortunatley it wil make my variant very error prone .. and on the other hand I do want the capability to construct from a C string appropriatley. I think one possible soultion would be to derive from boost::variant<bool,std::string> and put in an explicit constructor for const char *, this will also let me get around other similar problems. However deriving from boost::variant .... ???
not sure how healthy that is.
 
 
 
>To answer the question in the subject line: char* isn't bool, but it's 
>implicitly convertible to bool, which is probably (haven't really 
>checked, just an educated guess) what's causing you trouble. 
>
>Nindi wrote: 
>> When I have a Boost.Variant templated on a bool and a std::string, I get 
>> the following behaviour .. 
>> 
>> #include<string> 
>> 
>> #include<boost/variant.hpp> 
.> 
>> typedef boost::variant< bool,std::string> BoostVariant; 
>> 
>> int main () { 
>> 
>> BoostVariant v("A String"); 
>> 
>> bool &Bref(boost::get<bool&>(v)); // this is ok 
>> 
>> std::string &Sref(boost::get<std::string&>(v)); // But this throws 
>> 
>> return 0; 
>> 
>> } 
>
>Instead of 
>     BoostVariant v("A String"); 
>try 
>     BoostVariant v(std::string("A String")); 
>
>I think it will solve your problems.