- 
          Question: Why does 
lexical_cast<int8_t>("127") throw bad_lexical_cast?
          - 
                Answer: The type 
int8_t
                is a typedef to char or signed
                char. Lexical conversion to
                these types is simply reading a byte from source but since the source
                has more than one byte, the exception is thrown. Please use other
                integer types such as int
                or short int.
                If bounds checking is important, you can also call boost::numeric_cast: numeric_cast<int8_t>(lexical_cast<int>("127"));
               
 
         
 
- 
          Question: Why does 
lexical_cast<unsigned char>("127")
          throw bad_lexical_cast?
          - 
                Answer: Lexical conversion to any
                char type is simply reading a byte from source. But since the source
                has more than one byte, the exception is thrown. Please use other
                integer types such as 
int
                or short int.
                If bounds checking is important, you can also call boost::numeric_cast: numeric_cast<unsigned char>(lexical_cast<int>("127"));
               
 
         
 
- 
          Question: What does 
lexical_cast<std::string> of an int8_t
          or uint8_t not do what
          I expect?
          - 
                Answer: As above, note that int8_t
                and uint8_t are actually chars and are formatted as such. To avoid
                this, cast to an integer type first: 
lexical_cast<std::string>(static_cast<int>(n));
               
 
         
 
- 
          Question: The implementation always resets
          the 
ios_base::skipws flag of an underlying stream object.
          It breaks my operator>>
          that works only in presence of this flag. Can you remove code that resets
          the flag?
          
         
 
- 
          Question: Why 
std::cout << boost::lexical_cast<unsigned int>("-1");
          does not throw, but outputs 4294967295?
          - 
                Answer: 
boost::lexical_cast
                has the behavior of std::stringstream,
                which uses num_get
                functions of std::locale
                to convert numbers. If we look at the Programming languages — C++,
                we'll see, that num_get
                uses the rules of scanf
                for conversions. And in the C99 standard for unsigned input value
                minus sign is optional, so if a negative number is read, no errors
                will arise and the result will be the two's complement.
               
 
         
 
- 
          Question: Why 
boost::lexical_cast<int>(L'A'); outputs
          65 and boost::lexical_cast<wchar_t>(L"65"); does not throw?
          - 
                Answer: If you are using an old
                version of Visual Studio or compile code with /Zc:wchar_t- flag,
                
boost::lexical_cast sees single wchar_t character as unsigned short.
                It is not a boost::lexical_cast
                mistake, but a limitation of compiler options that you use.
               
 
         
 
- 
          Question: Why 
boost::lexical_cast<double>("-1.#IND"); throws boost::bad_lexical_cast?
          - 
                Answer: 
"-1.#IND"
                is a compiler extension, that violates standard. You shall input
                "-nan", "nan", "inf"
                , "-inf" (case
                insensitive) strings to get NaN and Inf values. boost::lexical_cast<string> outputs "-nan",
                "nan", "inf", "-inf"
                strings, when has NaN or Inf input values.
               
 
         
 
- 
          Question: What is the fastest way to convert
          a non zero terminated string or a substring using 
boost::lexical_cast?
          - 
                Answer: Use 
boost::iterator_range
                for conversion or lexical_cast
                overload with two parameters. For example, if you whant to convert
                to int two characters
                from a string str,
                you shall write lexical_cast<int>(make_iterator_range(str.data(), str.data() + 2));
                or lexical_cast<int>(str.data(),
                2);.