
On 13/10/12 16:35, Jochen Wilhelmy wrote: another question is why does lexical_cast treat int8_t and uint8_t like char? technically I see no reason for this as c++ has three types: char, signed char and unsigned char. in my code I use only char for characters and signed/unsigned char as numbers. I know that the standard stream operator << treats signed/unsigned char as char but I know no explanation for this (I consider it a bug ;-)
Changing the current behavior will break existing user code. However you can always use lexical_cast<std::string>(static_cast<short>(int8_value)) or even make some wrapper: template <class To> To my_cast(unsigned char f) { return boost::lexical_cast<To>(static_cast<int>(f)); } template <class From, class To> To my_cast(const From& f) { return boost::lexical_cast<To>(f); } 2012/10/14 John Bytheway <jbytheway+boost@gmail.com>:
Whatever we think of the standard streams' decision (and indeed I agree it's dubious), lexical_cast behaves in this way because it is defined in terms of the standard streams. Personally I think that is the right choice. Consistency is more important than tweaking each individual case.
Totally agree. -- Best regards, Antony Polukhin