Boost logo

Boost :

Subject: Re: [boost] [mpl] mpl::c_str fails for mpl::push_back
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2010-11-08 04:47:41


On Sun, 07 Nov 2010 01:38:05 -0600, vicente.botet
<vicente.botet_at_[hidden]> wrote:
> 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.

It might seem so on the surface, but consider this:

    typedef push_back< rgc, long_<MAX_LONG> >::type v;

or this:

    typedef push_back< rgc, struct my >::type v;

> 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?

It's certainly possible, but it would also certainly complicate things. At
the moment it seems to me to be too special of a case to be worth the
trouble.

-- 
Aleksey Gurtovoy
MetaCommunications Engineering

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk