Fix some issues with boost::int128_type
and boost::uint128_type conversions. Notify
user at compile time if the std::numeric_limits
are not specialized for 128bit types and boost::lexical_cast
can not make conversions.

Call-by-const reference for the parameters. This requires partial
specialization of class templates, so it doesn't work for MSVC 6,
and it uses the original pass by value there.

The MSVC 6 support is deprecated, and will be removed in a future
Boost version.

Earlier :

The previous version of lexical_cast used the default stream precision
for reading and writing floating-point numbers. For numerics that
have a corresponding specialization of std::numeric_limits,
the current version now chooses a precision to match.

The previous version of lexical_cast did not support conversion to
or from any wide-character-based types. For compilers with full language
and library support for wide characters, lexical_cast
now supports conversions from wchar_t,
wchar_t*,
and std::wstring and to wchar_t
and std::wstring.

The previous version of lexical_cast
assumed that the conventional stream extractor operators were sufficient
for reading values. However, string I/O is asymmetric, with the result
that spaces play the role of I/O separators rather than string content.
The current version fixes this error for std::string
and, where supported, std::wstring:
lexical_cast<std::string>("Hello, World")
succeeds instead of failing with a bad_lexical_cast
exception.

The previous version of lexical_cast
allowed unsafe and meaningless conversions to pointers. The current
version now throws a bad_lexical_cast
for conversions to pointers: lexical_cast<char*>("Goodbye,
World") now
throws an exception instead of causing undefined behavior.