From 3dd4d0ec9e6ccfe8a9e6e892ca21a67e1fb1b225 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 26 Apr 2011 22:56:50 +0000 Subject: [PATCH] Specialize std::numeric_limits<> for wxLongLong and wxULongLong. numeric_limits<> should be specialized for number-like types to allow using them in a similar way to the built-in types. Closes #13162. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67610 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/longlong.h | 25 +++++++++++++++++++++++++ tests/longlong/longlongtest.cpp | 13 +++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/wx/longlong.h b/include/wx/longlong.h index 71cb62b..b90bd71 100644 --- a/include/wx/longlong.h +++ b/include/wx/longlong.h @@ -1075,6 +1075,31 @@ WXDLLIMPEXP_BASE class wxTextInputStream &operator>>(class wxTextInputStream &st #endif +// ---------------------------------------------------------------------------- +// Specialize numeric_limits<> for our long long wrapper classes. +// ---------------------------------------------------------------------------- + +#if wxUSE_LONGLONG_NATIVE + +#include + +namespace std +{ + +template<> class numeric_limits + : public numeric_limits +{ +}; + +template<> class numeric_limits + : public numeric_limits +{ +}; + +} // namespace std + +#endif // wxUSE_LONGLONG_NATIVE + #endif // wxUSE_LONGLONG #endif // _WX_LONGLONG_H diff --git a/tests/longlong/longlongtest.cpp b/tests/longlong/longlongtest.cpp index f7790a1..f8bbc6c 100644 --- a/tests/longlong/longlongtest.cpp +++ b/tests/longlong/longlongtest.cpp @@ -69,6 +69,7 @@ private: CPPUNIT_TEST( BitOperations ); CPPUNIT_TEST( ToString ); CPPUNIT_TEST( LoHi ); + CPPUNIT_TEST( Limits ); CPPUNIT_TEST_SUITE_END(); void Conversion(); @@ -79,6 +80,7 @@ private: void BitOperations(); void ToString(); void LoHi(); + void Limits(); DECLARE_NO_COPY_CLASS(LongLongTestCase) }; @@ -337,4 +339,15 @@ void LongLongTestCase::LoHi() CPPUNIT_ASSERT_EQUAL( 987u, ull.GetHi() ); } +void LongLongTestCase::Limits() +{ +#if wxUSE_LONGLONG_NATIVE + CPPUNIT_ASSERT( std::numeric_limits::is_specialized ); + CPPUNIT_ASSERT( std::numeric_limits::is_specialized ); + + wxULongLong maxval = std::numeric_limits::max(); + CPPUNIT_ASSERT( maxval.ToDouble() > 0 ); +#endif // wxUSE_LONGLONG_NATIVE +} + #endif // wxUSE_LONGLONG -- 2.7.4