diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index c221f3c..cca8844 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -2446,17 +2446,59 @@ namespace boost { return caster_type::lexical_cast_impl(arg); } - template - inline Target lexical_cast(const CharType* chars, std::size_t count) - { - BOOST_STATIC_ASSERT_MSG(boost::detail::is_char_or_wchar::value, - "CharType must be a character or wide character type"); - - return boost::lexical_cast( - boost::iterator_range(chars, chars + count) + template + inline Target lexical_cast(const char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) ); } + + template + inline Target lexical_cast(const unsigned char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } + + template + inline Target lexical_cast(const signed char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } + +#ifndef BOOST_LCAST_NO_WCHAR_T + template + inline Target lexical_cast(const wchar_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif +#ifndef BOOST_NO_CHAR16_T + template + inline Target lexical_cast(const char16_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif +#ifndef BOOST_NO_CHAR32_T + template + inline Target lexical_cast(const char32_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif + } // namespace boost #else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION diff --git a/lexical_cast_test.cpp b/lexical_cast_test.cpp index 18e063b..b7b7fb3 100644 --- a/lexical_cast_test.cpp +++ b/lexical_cast_test.cpp @@ -36,6 +36,7 @@ #include #include #include +#include // std::transform #include #if (defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64)) \ @@ -622,6 +623,10 @@ void test_getting_pointer_to_function() typedef std::string(*f3)(const int&); f3 p3 = &boost::lexical_cast; BOOST_CHECK(p3); + + std::vector values; + std::vector ret; + std::transform(values.begin(), values.end(), ret.begin(), boost::lexical_cast); }