From 5ad7562d6533095437aa62ce80c130e9e97d9a0f Mon Sep 17 00:00:00 2001 From: mat007 Date: Sun, 1 May 2011 19:47:48 +0000 Subject: [PATCH] Fixed a bug preventing non-const pointer to be logged properly git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@304 860be788-9bd5-4423-9f1e-828f051e677b --- src/libraries/turtle/log.hpp | 20 ++++++++++++------- .../turtle_test/log_with_conversions_test.cpp | 15 ++++++++++++++ .../log_without_conversions_test.cpp | 15 ++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/libraries/turtle/log.hpp b/src/libraries/turtle/log.hpp index 7261454..911bdb3 100644 --- a/src/libraries/turtle/log.hpp +++ b/src/libraries/turtle/log.hpp @@ -105,11 +105,7 @@ namespace detail3 } template< typename T > - BOOST_DEDUCED_TYPENAME boost::disable_if< - boost::function_types::is_callable_builtin< T >, - stream& - >::type - operator<<( stream& s, const T& t ) + stream& operator<<( stream& s, const T& t ) { using namespace detail3; *s.s_ << t; @@ -257,9 +253,19 @@ namespace detail boost::function_types::is_callable_builtin< T >, stream& >::type - operator<<( stream& s, const T& ) + operator<<( stream& s, T* ) { - return s << '?'; + return s << '?'; + } + template< typename T > + BOOST_DEDUCED_TYPENAME boost::disable_if< + boost::function_types::is_callable_builtin< T >, + stream& + >::type + operator<<( stream& s, T* t ) + { + *s.s_ << t; + return s; } } diff --git a/src/tests/turtle_test/log_with_conversions_test.cpp b/src/tests/turtle_test/log_with_conversions_test.cpp index e462130..695e8a6 100644 --- a/src/tests/turtle_test/log_with_conversions_test.cpp +++ b/src/tests/turtle_test/log_with_conversions_test.cpp @@ -9,6 +9,7 @@ #define MOCK_USE_CONVERSIONS #include #include +#include #include #include #include @@ -30,6 +31,20 @@ namespace } } +BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized_with_conversions ) +{ + { + int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } + { + const int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } +} + BOOST_AUTO_TEST_CASE( base_type_yields_its_value_when_serialized_with_conversions ) { BOOST_CHECK_EQUAL( "42", to_string( 42 ) ); diff --git a/src/tests/turtle_test/log_without_conversions_test.cpp b/src/tests/turtle_test/log_without_conversions_test.cpp index b0cdbe5..95a801c 100644 --- a/src/tests/turtle_test/log_without_conversions_test.cpp +++ b/src/tests/turtle_test/log_without_conversions_test.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -29,6 +30,20 @@ namespace } } +BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized_without_conversions ) +{ + { + int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } + { + const int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } +} + BOOST_AUTO_TEST_CASE( base_type_yields_its_value_when_serialized_without_conversions ) { BOOST_CHECK_EQUAL( "42", to_string( 42 ) );