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 ) );