Re: [Boost-users] Boost-users Digest, Vol 3442, Issue 1
Hello,
the code here doesn't compile:
#include
#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
::value << '\n'; std::cout << BOOST_MPL_LIMIT_STRING_SIZE << '\n'; } As usual, the example from docs works. The error is: <snip>
I'm surprised multi-character character constants are being used at all in Boost, they are not supposed to be portable:
http://stackoverflow.com/questions/6944730/multiple-characters-in-a-characte...
Boost has never shied away from non-portable constructs. However, it *does* wrap non-portable constructs in config macros to ensure a consistent cross-platform experience, which is what mpl::string does with multichar literals.
Does the wrapping include handling 'qwer' on platforms where int is not 4 bytes? It may, I don't have a way to test it.
If you only want to use single character constants, you could place the following #define before any includes:
#define BOOST_MPL_LIMIT_STRING_SIZE (32*4)
That would allow up to 32, provided your compiler supports it (yet another portability issue).>>
That would increase the compile time and decrease readability for no benefit, IMO.
Opinions may differ on the readability of: typedef mpl::string<'hell','o wo','rld'> ...... vs: typedef mpl::string<'h','e','l','l','o',' ','w','o','r','l','d'>..... But increasing compile time would be bad. That's why I'm asking if it would be possible for there to be an mpl::string<> that takes BOOST_MPL_LIMIT_STRING_SIZE 'char's? [It looks like 'x' started being a char in C++11, so it may be complicated supporting prior versions]
Since in C++, the type of 'x' is char, it should be possible to create another overload of mpl::string<> that takes BOOST_MPL_LIMIT_STRING_SIZE 'char's, which would work the way most people would expect..
How do you think most people expect it to work?
My opinion is that most programmers would expect BOOST_MPL_LIMIT_STRING_SIZE single character constants to work. I know that multi-character constants are not always portable, so I try not to use them, even if a particular instance may be portable.
-- Eric Niebler Boost.org http://www.boost.org
Dan Searles
participants (1)
-
Dan Searles