[prev in list] [next in list] [prev in thread] [next in thread] 

List:       boost-commit
Subject:    [Boost-commit] svn:boost r80787 - in branches/release: boost libs/conversion libs/conversion/doc
From:       antoshkka () gmail ! com
Date:       2012-09-30 16:07:33
Message-ID: 20120930160733.B856F2F80D1 () wowbagger ! osl ! iu ! edu
[Download RAW message or body]

Author: apolukhin
Date: 2012-09-30 12:07:32 EDT (Sun, 30 Sep 2012)
New Revision: 80787
URL: http://svn.boost.org/trac/boost/changeset/80787

Log:
Merege  fix for #7421 from trunk
Text files modified: 
   branches/release/boost/lexical_cast.hpp                |    52 \
++++++++++++++++++++++++++++++++++++---   \
branches/release/libs/conversion/doc/lexical_cast.qbk  |     4 +-                     \
  branches/release/libs/conversion/lexical_cast_test.cpp |    15 +++++++++++          \
  3 files changed, 64 insertions(+), 7 deletions(-)

Modified: branches/release/boost/lexical_cast.hpp
==============================================================================
--- branches/release/boost/lexical_cast.hpp	(original)
+++ branches/release/boost/lexical_cast.hpp	2012-09-30 12:07:32 EDT (Sun, 30 Sep \
2012) @@ -2300,17 +2300,59 @@
         return caster_type::lexical_cast_impl(arg);
     }
 
-    template <typename Target, typename CharType>
-    inline Target lexical_cast(const CharType* chars, std::size_t count)
+    template <typename Target>
+    inline Target lexical_cast(const char* chars, std::size_t count)
     {
-        BOOST_STATIC_ASSERT_MSG(::boost::detail::is_char_or_wchar<CharType>::value, 
-            "CharType must be a character or wide character type");
+        return ::boost::lexical_cast<Target>(
+            ::boost::iterator_range<const char*>(chars, chars + count)
+        );
+    }
+
+
+    template <typename Target>
+    inline Target lexical_cast(const unsigned char* chars, std::size_t count)
+    {
+        return ::boost::lexical_cast<Target>(
+            ::boost::iterator_range<const unsigned char*>(chars, chars + count)
+        );
+    }
 
+    template <typename Target>
+    inline Target lexical_cast(const signed char* chars, std::size_t count)
+    {
         return ::boost::lexical_cast<Target>(
-            ::boost::iterator_range<const CharType*>(chars, chars + count)
+            ::boost::iterator_range<const signed char*>(chars, chars + count)
         );
     }
 
+#ifndef BOOST_LCAST_NO_WCHAR_T
+    template <typename Target>
+    inline Target lexical_cast(const wchar_t* chars, std::size_t count)
+    {
+        return ::boost::lexical_cast<Target>(
+            ::boost::iterator_range<const wchar_t*>(chars, chars + count)
+        );
+    }
+#endif
+#ifndef BOOST_NO_CHAR16_T
+    template <typename Target>
+    inline Target lexical_cast(const char16_t* chars, std::size_t count)
+    {
+        return ::boost::lexical_cast<Target>(
+            ::boost::iterator_range<const char16_t*>(chars, chars + count)
+        );
+    }
+#endif
+#ifndef BOOST_NO_CHAR32_T
+    template <typename Target>
+    inline Target lexical_cast(const char32_t* chars, std::size_t count)
+    {
+        return ::boost::lexical_cast<Target>(
+            ::boost::iterator_range<const char32_t*>(chars, chars + count)
+        );
+    }
+#endif
+
 } // namespace boost
 
 #else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

Modified: branches/release/libs/conversion/doc/lexical_cast.qbk
==============================================================================
--- branches/release/libs/conversion/doc/lexical_cast.qbk	(original)
+++ branches/release/libs/conversion/doc/lexical_cast.qbk	2012-09-30 12:07:32 EDT \
(Sun, 30 Sep 2012) @@ -107,8 +107,8 @@
 Returns the result of streaming arg into a standard library string-based stream and \
then out as a Target object. Where Target is either `std::string` or `std::wstring`, \
stream extraction takes the whole content of the string, including spaces, rather \
than relying on the default `operator>>` behavior. If the conversion is unsuccessful, \
a `bad_lexical_cast` exception is thrown.  
 ``
-    template <typename Target, typename CharType>
-      Target lexical_cast(const CharType* chars, std::size_t count);
+    template <typename Target>
+      Target lexical_cast(const AnyCharacterType* chars, std::size_t count);
 ``
 Takes an array of `count` characters as input parameter and streams them out as a \
Target object. If the conversion is unsuccessful, a `bad_lexical_cast` exception is \
thrown. This call may be useful for processing nonzero terminated array of characters \
or processing just some part of character array.  

Modified: branches/release/libs/conversion/lexical_cast_test.cpp
==============================================================================
--- branches/release/libs/conversion/lexical_cast_test.cpp	(original)
+++ branches/release/libs/conversion/lexical_cast_test.cpp	2012-09-30 12:07:32 EDT \
(Sun, 30 Sep 2012) @@ -88,6 +88,7 @@
 #if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)
 void test_char32_conversions();
 #endif
+void test_getting_pointer_to_function();
 
 unit_test::test_suite *init_unit_test_suite(int, char *[])
 {
@@ -125,6 +126,7 @@
 #if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)
     suite->add(BOOST_TEST_CASE(&test_char32_conversions));
 #endif
+    suite->add(BOOST_TEST_CASE(&test_getting_pointer_to_function));
 
     return suite;
 }
@@ -599,4 +601,17 @@
 }
 #endif
 
+template <class To, class From, class Func>
+To try_cast_by_ptr(const From& from, const Func& f) {
+    return f(from);
+};
+
+void test_getting_pointer_to_function()
+{
+    // Just checking that &lexical_cast<To, From> is not ambiguous
+    BOOST_CHECK_EQUAL(100, try_cast_by_ptr<int>("100", &boost::lexical_cast<int, \
const char[4]>)); +    BOOST_CHECK_EQUAL(100, try_cast_by_ptr<int>("100", \
&boost::lexical_cast<int, std::string>)); +    BOOST_CHECK_EQUAL(std::string("100"), \
try_cast_by_ptr<std::string>(100, &boost::lexical_cast<std::string, int>)); +}
+
 
_______________________________________________
Boost-commit mailing list
Boost-commit@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-commit


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic