diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index ff295be..b7d6a63 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #ifdef BOOST_NO_STRINGSTREAM #include @@ -28,10 +28,15 @@ #if defined(BOOST_NO_STRINGSTREAM) || \ defined(BOOST_NO_STD_WSTRING) || \ - defined(BOOST_NO_INTRINSIC_WCHAR_T) + defined(BOOST_NO_STD_LOCALE) || \ + defined(BOOST_NO_CWCHAR) #define DISABLE_WIDE_CHAR_SUPPORT #endif +#ifdef BOOST_NO_INTRINSIC_WCHAR_T +#include +#endif + namespace boost { // exception used to indicate runtime lexical_cast failure @@ -169,6 +174,8 @@ namespace boost #if defined(BOOST_NO_STRINGSTREAM) std::strstream stream; + #elif defined(BOOST_NO_STD_LOCALE) + std::stringstream stream; #else std::basic_stringstream stream; #endif diff --git a/lexical_cast_test.cpp b/lexical_cast_test.cpp index 8fe79bb..7444199 100644 --- a/lexical_cast_test.cpp +++ b/lexical_cast_test.cpp @@ -13,7 +13,7 @@ #include #if defined(__INTEL_COMPILER) -#pragma warning(disable: 383 488 981 1418 1419) +#pragma warning(disable: 193 383 488 981 1418 1419) #elif defined(BOOST_MSVC) #pragma warning(disable: 4097 4100 4121 4127 4146 4244 4245 4511 4512 4701 4800) #endif @@ -21,10 +21,12 @@ #include #include #include +#include #if defined(BOOST_NO_STRINGSTREAM) || \ defined(BOOST_NO_STD_WSTRING) || \ - defined(BOOST_NO_INTRINSIC_WCHAR_T) + defined(BOOST_NO_STD_LOCALE) || \ + defined(BOOST_NO_CWCHAR) #define DISABLE_WIDE_CHAR_SUPPORT #endif @@ -74,10 +76,6 @@ void test_conversion_to_char() BOOST_CHECK_EQUAL(' ', lexical_cast(" ")); BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL('A', lexical_cast("A")); - BOOST_CHECK_EQUAL(' ', lexical_cast(" ")); - BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL('A', lexical_cast(std::string("A"))); BOOST_CHECK_EQUAL(' ', lexical_cast(std::string(" "))); BOOST_CHECK_THROW( @@ -108,8 +106,6 @@ void test_conversion_to_int() BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(123, lexical_cast("123")); - BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(123,lexical_cast(std::string("123"))); BOOST_CHECK_THROW( lexical_cast(std::string(" 123")), boost::bad_lexical_cast); @@ -134,9 +130,6 @@ void test_conversion_to_double() BOOST_CHECK_EQUAL(1.23, lexical_cast("1.23")); BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(1.23, lexical_cast("1.23")); - BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(1.23, lexical_cast(std::string("1.23"))); BOOST_CHECK_THROW( lexical_cast(std::string("")), boost::bad_lexical_cast); @@ -162,8 +155,6 @@ void test_conversion_to_bool() BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(true, lexical_cast("1")); BOOST_CHECK_EQUAL(false, lexical_cast("0")); - BOOST_CHECK_THROW(lexical_cast(""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast("Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(true, lexical_cast(std::string("1"))); BOOST_CHECK_EQUAL(false, lexical_cast(std::string("0"))); BOOST_CHECK_THROW( @@ -184,9 +175,6 @@ void test_conversion_to_string() BOOST_CHECK_EQUAL("Test", lexical_cast("Test")); BOOST_CHECK_EQUAL(" ", lexical_cast(" ")); BOOST_CHECK_EQUAL("", lexical_cast("")); - BOOST_CHECK_EQUAL("Test", lexical_cast("Test")); - BOOST_CHECK_EQUAL(" ", lexical_cast(" ")); - BOOST_CHECK_EQUAL("", lexical_cast("")); BOOST_CHECK_EQUAL("Test", lexical_cast(std::string("Test"))); BOOST_CHECK_EQUAL(" ", lexical_cast(std::string(" "))); BOOST_CHECK_EQUAL("", lexical_cast(std::string(""))); @@ -206,9 +194,6 @@ void test_conversion_from_wchar_t() BOOST_CHECK_EQUAL(1, lexical_cast(L'1')); BOOST_CHECK_THROW(lexical_cast(L'A'), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(123, lexical_cast(L"123")); - BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(123, lexical_cast(L"123")); BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); @@ -216,9 +201,6 @@ void test_conversion_from_wchar_t() BOOST_CHECK_EQUAL(1.0, lexical_cast(L'1')); BOOST_CHECK_THROW(lexical_cast(L'A'), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(1.23, lexical_cast(L"1.23")); - BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); BOOST_CHECK_EQUAL(1.23, lexical_cast(L"1.23")); BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); @@ -230,10 +212,6 @@ void test_conversion_from_wchar_t() BOOST_CHECK_EQUAL(false, lexical_cast(L"0")); BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(true, lexical_cast(L"1")); - BOOST_CHECK_EQUAL(false, lexical_cast(L"0")); - BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); #endif } @@ -242,7 +220,9 @@ void test_conversion_to_wchar_t() #ifndef DISABLE_WIDE_CHAR_SUPPORT BOOST_CHECK_EQUAL(L'1', lexical_cast(1)); BOOST_CHECK_EQUAL(L'0', lexical_cast(0)); + #if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1200)) BOOST_CHECK_THROW(lexical_cast(123), boost::bad_lexical_cast); + #endif BOOST_CHECK_EQUAL(L'1', lexical_cast(1.0)); BOOST_CHECK_EQUAL(L'0', lexical_cast(0.0)); BOOST_CHECK_EQUAL(L'1', lexical_cast(true)); @@ -252,18 +232,18 @@ void test_conversion_to_wchar_t() BOOST_CHECK_EQUAL(L'A', lexical_cast(L"A")); BOOST_CHECK_EQUAL(L' ', lexical_cast(L" ")); BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); + #if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1200)) BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(L'A', lexical_cast(L"A")); - BOOST_CHECK_EQUAL(L' ', lexical_cast(L" ")); - BOOST_CHECK_THROW(lexical_cast(L""), boost::bad_lexical_cast); - BOOST_CHECK_THROW(lexical_cast(L"Test"), boost::bad_lexical_cast); + #endif BOOST_CHECK_EQUAL(L'A', lexical_cast(std::wstring(L"A"))); BOOST_CHECK_EQUAL(L' ', lexical_cast(std::wstring(L" "))); BOOST_CHECK_THROW( lexical_cast(std::wstring(L"")), boost::bad_lexical_cast); + #if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1200)) BOOST_CHECK_THROW( lexical_cast(std::wstring(L"Test")), boost::bad_lexical_cast); #endif + #endif } void test_conversion_from_wstring() @@ -275,12 +255,6 @@ void test_conversion_from_wstring() BOOST_CHECK_THROW( lexical_cast(std::wstring(L"Test")), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(1.23, lexical_cast(std::wstring(L"1.23"))); - BOOST_CHECK_THROW( - lexical_cast(std::wstring(L"")), boost::bad_lexical_cast); - BOOST_CHECK_THROW( - lexical_cast(std::wstring(L"Test")), boost::bad_lexical_cast); - BOOST_CHECK_EQUAL(true, lexical_cast(std::wstring(L"1"))); BOOST_CHECK_EQUAL(false, lexical_cast(std::wstring(L"0"))); BOOST_CHECK_THROW( @@ -303,9 +277,6 @@ void test_conversion_to_wstring() BOOST_CHECK(L"Test" == lexical_cast(L"Test")); BOOST_CHECK(L" " == lexical_cast(L" ")); BOOST_CHECK(L"" == lexical_cast(L"")); - BOOST_CHECK(L"Test" == lexical_cast(L"Test")); - BOOST_CHECK(L" " == lexical_cast(L" ")); - BOOST_CHECK(L"" == lexical_cast(L"")); BOOST_CHECK(L"Test" == lexical_cast(std::wstring(L"Test"))); BOOST_CHECK(L" " == lexical_cast(std::wstring(L" "))); BOOST_CHECK(L"" == lexical_cast(std::wstring(L"")));