Boost logo

Boost Users :

Subject: Re: [Boost-users] mpl::c_str<mpl::string<>> compile error
From: Eric Niebler (eniebler_at_[hidden])
Date: 2013-05-06 21:52:49


On 5/4/2013 12:24 PM, Olaf Peter wrote:
> Hello,
>
> the code here doesn't compile:
>
> #include <boost/mpl/string.hpp>
> #include <iostream>
>
> namespace mpl = boost::mpl;
>
> typedef mpl::string<'h','e','l','l','o',' ','w','o','r','l','d'>::type
> my_hello;
>
> int main()
> {
> std::cout << mpl::c_str<my_hello>::value << '\n';
> std::cout << BOOST_MPL_LIMIT_STRING_SIZE << '\n';
> }
>
> As usual, the example from docs works. The error is:
>
> $ LANG=en g++ t.cpp -o t && ./t
> t.cpp:6:64: error: wrong number of template arguments (11, should be 8)
> /usr/local/include/boost/mpl/string.hpp:102:12: error: provided for
> 'template<int C0, int C1, int C2, int C3, int C4, int C5, int C6, int
> C7> struct boost::mpl::string'
> t.cpp:6:72: error: expected initializer before 'my_hello'
> t.cpp: In function 'int main()':
> t.cpp:10:26: error: 'my_hello' was not declared in this scope
> t.cpp:10:34: error: template argument 1 is invalid
>
> why does it complain about wrong number of template arguments?
> BOOST_MPL_LIMIT_STRING_SIZE is 32?
>
> $ svn info
> ...
> Path: .
> URL: http://svn.boost.org/svn/boost/trunk
> Repository Root: http://svn.boost.org/svn/boost
> Repository UUID: b8fc166d-592f-0410-95f2-cb63ce0dd405
> Revision: 83988
> ...
> $ LANG=en g++ --version
> g++ (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2)
> ...

Have you tried:

  typedef mpl::string<'hell','o wo','rld'>::type
  my_hello;

? BOOST_MPL_LIMIT_STRING_SIZE is a count of "characters" in the
mpl::string, which is 4X the number of template parameters, since
mpl::string uses multi-character literals to pack 4 characters into an int.

HTH,

-- 
Eric Niebler
Boost.org
http://www.boost.org

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net