diff --git a/test/Jamfile b/test/Jamfile index 0826df5..35a6dd2 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -1,6 +1,6 @@ # Boost.Bind Library test Jamfile # -# Copyright (c) 2003, 2004 Peter Dimov +# Copyright (c) 2003-2005 Peter Dimov # # Permission to copy, use, modify, sell and distribute this software # is granted provided this copyright notice appears in all copies. @@ -18,6 +18,7 @@ DEPENDS all : bind ; { test-suite "bind" : [ run bind_test.cpp ] + [ run bind_dm_test.cpp ] [ run bind_eq_test.cpp ] [ run bind_const_test.cpp ] [ run bind_cv_test.cpp ] diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index b8c8efc..c0ffb2f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1,6 +1,6 @@ # Boost.Bind Library test Jamfile # -# Copyright (c) 2003, 2004 Peter Dimov +# Copyright (c) 2003-2005 Peter Dimov # # Permission to copy, use, modify, sell and distribute this software # is granted provided this copyright notice appears in all copies. @@ -12,6 +12,7 @@ import testing ; test-suite "bind" : [ run bind_test.cpp ] + [ run bind_dm_test.cpp ] [ run bind_eq_test.cpp ] [ run bind_const_test.cpp ] [ run bind_cv_test.cpp ] diff --git a/test/bind_dm_test.cpp b/test/bind_dm_test.cpp new file mode 100644 index 0000000..6710965 --- /dev/null +++ b/test/bind_dm_test.cpp @@ -0,0 +1,73 @@ +#include + +#if defined(BOOST_MSVC) +#pragma warning(disable: 4786) // identifier truncated in debug info +#pragma warning(disable: 4710) // function not inlined +#pragma warning(disable: 4711) // function selected for automatic inline expansion +#pragma warning(disable: 4514) // unreferenced inline removed +#endif + +// +// bind_dm_test.cpp - data members +// +// Copyright (c) 2005 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(push, 3) +#endif + +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(pop) +#endif + +#include + +struct X +{ + int m; +}; + +X f( int v ) +{ + X r = { v }; + return r; +} + +int main() +{ + X x = { 17041 }; + X * px = &x; + + BOOST_TEST( boost::bind( &X::m, _1 )( x ) == 17041 ); + BOOST_TEST( boost::bind( &X::m, _1 )( px ) == 17041 ); + + BOOST_TEST( boost::bind( &X::m, x )() == 17041 ); + BOOST_TEST( boost::bind( &X::m, px )() == 17041 ); + BOOST_TEST( boost::bind( &X::m, boost::ref(x) )() == 17041 ); + + + X const cx = x; + X const * pcx = &cx; + + BOOST_TEST( boost::bind( &X::m, _1 )( cx ) == 17041 ); + BOOST_TEST( boost::bind( &X::m, _1 )( pcx ) == 17041 ); + + BOOST_TEST( boost::bind( &X::m, cx )() == 17041 ); + BOOST_TEST( boost::bind( &X::m, pcx )() == 17041 ); + BOOST_TEST( boost::bind( &X::m, boost::ref(cx) )() == 17041 ); + + int const v = 42; + + BOOST_TEST( boost::bind( &X::m, boost::bind( f, _1 ) )( v ) == v ); + + return boost::report_errors(); +} diff --git a/test/bind_test.cpp b/test/bind_test.cpp index c6d40eb..ede5d49 100644 --- a/test/bind_test.cpp +++ b/test/bind_test.cpp @@ -390,7 +390,7 @@ void member_function_test() bind(&X::g8, x, 1, 2, 3, 4, 5, 6, 7, 8)(); bind(&X::g8, ref(x), 1, 2, 3, 4, 5, 6, 7, 8)(); - BOOST_TEST( bind(&X::hash, _1)(x) == 23558 ); + BOOST_TEST( x.hash == 23558 ); } void member_function_void_test() @@ -480,7 +480,7 @@ void member_function_void_test() bind(&V::g8, v, 1, 2, 3, 4, 5, 6, 7, 8)(); bind(&V::g8, ref(v), 1, 2, 3, 4, 5, 6, 7, 8)(); - BOOST_TEST( bind(&V::hash, _1)(v) == 23558 ); + BOOST_TEST( v.hash == 23558 ); } void nested_bind_test()