$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [mpl] mpl::c_str fails for mpl::push_back
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2010-11-07 02:38:05
----- Original Message -----
From: "Eric Niebler" <eric_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Sunday, November 07, 2010 2:15 AM
Subject: Re: [boost] [mpl] mpl::c_str fails for mpl::push_back
>
> On 11/6/2010 8:51 PM, vicente.botet wrote:
>> Hi,
>>
>> the following results in a compile error for msvc-10.0. It works for gcc-3.4, gcc-4.3, gcc-4.5.
>>
>> typedef mpl::vector_c<char, 'h','e','l','l','o',' ','w','o','r','l','d'> hello;
>>
>> typedef mpl::push_back<hello, mpl::char_<'!'> >::type hello2;
>>
>> BOOST_TEST((std::string(mpl::c_str<hello2>::value)== "hello world!")); // line 59
>>
>> C:\cygwin\boost\v44\boost/mpl/string.hpp(592) : error C2039: 'value_type' : is not a member of 'boost::mpl::vector12<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>'
>> Is this a known bug?
>
>
> mpl::c_str is for use with mpl::string. Does the problem also occur with
> mpl::string?
No push_back on a mpl::string is works as it is yet a Integral Sequence Wrapper. But push_back on a vector_c which is a Integral Sequence Wrapper is not a Integral Sequence Wrapper and this seems to me a more critical issue.
BOOST_STATIC_ASSERT((boost::is_same<hello2::value_type,char>::value)); // compile fail
I was loking for a way to represent static sequences of arbitrary chararcters types and mpl::string doesn't supports wchar_t, u16char or u32char so I though to move to vector_c.
BTW, I have found the use of c_str in a MPL tests string.cpp
typedef mpl::vector_c<char, 'a','b','c','d','e'> rgc;
*** BOOST_TEST(0 == std::strcmp("abcde", mpl::c_str<rgc>::value));
typedef mpl::copy<rgc, mpl::back_inserter<mpl::string<> > >::type str;
BOOST_TEST(0 == std::strcmp("abcde", mpl::c_str<str>::value));
I don't think I could find something in the doc that states that the push_back on a Integral Sequence Wrapper must be a Integral Sequence Wrapper, but I think that this is a desirable property.
Do you have a workaround I can use to preserve it?
Do you think that it is possible to ensure that property without too much trouble inside the library?
Thanks,
Vicente