
----- Original Message ----- From: "vicente.botet" <vicente.botet@wanadoo.fr> To: <boost@lists.boost.org> Sent: Monday, November 08, 2010 6:01 PM Subject: Re: [boost] [mpl] mpl::c_str fails for mpl::push_back
I'll prepare a patch with the c_str parameter extension in a separated file, as it should not depend any more on mpl::string and could work with other sequences and the value_type trait in another file. Let me know if there is someting wrong.
Hi, while trying to check c_str on set_c sequence I have found a behaviour that seems to a bug. With list_c, the following code works well, typedef mpl::list_c<char, 'a'> str_type; typedef mpl::begin<str_type>::type i0; typedef mpl::next<i0>::type i1; but with set_c typedef mpl::set_c<char, 'a'> str_type; typedef mpl::begin<str_type>::type i0; typedef mpl::next<i0>::type i1; I get the following compile error on gcc ../../../boost/mpl/set/aux_/iterator.hpp: In instantiation of `boost::mpl::next<boost::mpl::s_iter<main()::str_type, boost::mpl::set0_c<char> > >': ../../../boost/mpl/eval_if.hpp:38: instantiated from `boost::mpl::eval_if<boost::mpl::has_key<main()::str_type, mpl_::void_>, boost::mpl::identity<boost::mpl::s_iter<main()::str_type, boost::mpl::set0_c<char> > >, boost::mpl::next<boost::mpl::s_iter<main()::str_type, boost::mpl::set0_c<char> > > >' ../../../boost/mpl/set/aux_/iterator.hpp:38: instantiated from `boost::mpl::s_iter_get<main()::str_type, boost::mpl::set0_c<char> >' ../../../boost/mpl/set/aux_/iterator.hpp:57: instantiated from `boost::mpl::next<boost::mpl::s_iter<main()::str_type, boost::mpl::s_item<mpl_::integral_c<char, 'a'>, boost::mpl::set0_c<char> > > >' c_str\c_str_pass.cpp:271: instantiated from here or this one with msvc C:\cygwin\boost\v44\boost/mpl/set/aux_/iterator.hpp(56) : error C2039: 'base' : is not a member of 'boost::mpl::set0_c<T>' with [ T=char ] C:\cygwin\boost\v44\boost/mpl/eval_if.hpp(41) : see reference to class template instantiation 'boost::mpl::next<T>' being compiled with [ T=boost::mpl::s_iter<str_type,boost::mpl::set0_c<char>> ] C:\cygwin\boost\v44\boost/mpl/set/aux_/iterator.hpp(38) : see reference to class template instantiation 'boost::mpl::eval_if<C,F1,F2>' being compiled with [ C=boost::mpl::has_key<str_type,boost::mpl::set0<>::item_type_>, F1=boost::mpl::identity<boost::mpl::s_iter<str_type,boost::mpl::set0_c<char>>>, F2=boost::mpl::next<boost::mpl::s_iter<str_type,boost::mpl::set0_c<char>>> ] C:\cygwin\boost\v44\boost/mpl/set/aux_/iterator.hpp(57) : see reference to class template instantiation 'boost::mpl::s_iter_get<Set,Tail>' being compiled with [ Set=str_type, Tail=boost::mpl::set0_c<char> ] c_str\c_str_pass.cpp(271) : see reference to class template instantiation 'boost::mpl::next<T>' being compiled with [ T=boost::mpl::s_iter<str_type,boost::mpl::s_item<boost::mpl::integral_c<char,97>,boost::mpl::set0_c<char>>> ] BTW, this works also typedef mpl::set<mpl::char_<'a'> > str_type; typedef mpl::begin<str_type>::type i0; typedef mpl::next<i0>::type i1; What is happening? Am I missing something evident or is this a real bug? Best, Vicente