
----- Original Message ----- From: "Eric Niebler" <eric@boostpro.com> To: <boost@lists.boost.org> 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