From 2768c8b172ac45037270a21f17b7d8df4375f8b4 Mon Sep 17 00:00:00 2001 From: mat007 Date: Sat, 24 Mar 2012 06:23:47 +0000 Subject: [PATCH] Fixed phoenix and lambda functors logging git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@432 860be788-9bd5-4423-9f1e-828f051e677b --- src/libraries/turtle/log.hpp | 24 +++++++++++++++++++++--- src/tests/turtle_test/log_test.cpp | 10 ++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/libraries/turtle/log.hpp b/src/libraries/turtle/log.hpp index 14b3cf4..faf8faf 100644 --- a/src/libraries/turtle/log.hpp +++ b/src/libraries/turtle/log.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -20,6 +21,14 @@ namespace boost template< typename T > class shared_ptr; template< typename T > class weak_ptr; +namespace phoenix +{ + template< typename T > struct actor; +} +namespace lambda +{ + template< typename T > struct lambda_functor; +} namespace assign_detail { template< typename T > class generic_list; @@ -64,7 +73,7 @@ namespace detail3 struct holder_imp : holder { explicit holder_imp( const T& t ) - : t_( &t ) + : t_( boost::addressof( t ) ) {} virtual void serialize( std::ostream& s ) const { @@ -149,7 +158,7 @@ namespace detail2 struct formatter { explicit formatter( const T& t ) - : t_( &t ) + : t_( boost::addressof( t ) ) {} void serialize( stream& s ) const { @@ -269,7 +278,16 @@ namespace detail { return s << mock::format( t.lock() ); } - + template< typename T > + stream& operator<<( stream& s, boost::lambda::lambda_functor< T > ) + { + return s << '?'; + } + template< typename T > + stream& operator<<( stream& s, boost::phoenix::actor< T > ) + { + return s << '?'; + } template< typename T > BOOST_DEDUCED_TYPENAME boost::enable_if< boost::function_types::is_callable_builtin< T >, diff --git a/src/tests/turtle_test/log_test.cpp b/src/tests/turtle_test/log_test.cpp index 14a65b1..416a816 100644 --- a/src/tests/turtle_test/log_test.cpp +++ b/src/tests/turtle_test/log_test.cpp @@ -12,8 +12,16 @@ #include #include #include +#ifdef _MSC_VER +#pragma warning( push, 0 ) +#endif +#include #include #include +#include +#ifdef _MSC_VER +#pragma warning( pop ) +#endif #include #include #include @@ -578,6 +586,7 @@ namespace BOOST_AUTO_TEST_CASE( boost_phoenix_functor_yields_question_mark_when_serialized ) { BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::arg_names::_1 < 42 ) ); } BOOST_AUTO_TEST_CASE( boost_bind_functor_yields_question_mark_when_serialized ) @@ -588,4 +597,5 @@ BOOST_AUTO_TEST_CASE( boost_bind_functor_yields_question_mark_when_serialized ) BOOST_AUTO_TEST_CASE( boost_lambda_functor_yields_question_mark_when_serialized ) { BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::_1 < 42 ) ); }