diff --git a/test/Jamfile b/test/Jamfile index e76f026..71d7538 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -23,6 +23,7 @@ DEPENDS all : bind ; [ run bind_const_test.cpp ] [ run bind_cv_test.cpp ] [ run bind_stateful_test.cpp ] + [ run bind_dm2_test.cpp ] [ run bind_not_test.cpp ] [ run bind_rel_test.cpp ] [ run mem_fn_test.cpp ] diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index ee2a9d7..42cf5cb 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -17,6 +17,7 @@ test-suite "bind" [ run bind_const_test.cpp ] [ run bind_cv_test.cpp ] [ run bind_stateful_test.cpp ] + [ run bind_dm2_test.cpp ] [ run bind_not_test.cpp ] [ run bind_rel_test.cpp ] [ run mem_fn_test.cpp ] diff --git a/test/bind_dm2_test.cpp b/test/bind_dm2_test.cpp new file mode 100644 index 0000000..fc996c5 --- /dev/null +++ b/test/bind_dm2_test.cpp @@ -0,0 +1,70 @@ +#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, advanced uses +// +// 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 +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(pop) +#endif + +#include + +struct X +{ + int m; +}; + +struct Y +{ + char m[ 64 ]; +}; + +int main() +{ + X x = { 0 }; + X * px = &x; + + boost::bind< int& >( &X::m, _1 )( px ) = 42; + + BOOST_TEST( x.m == 42 ); + + boost::bind< int& >( &X::m, boost::ref(x) )() = 17041; + + BOOST_TEST( x.m == 17041 ); + + X const * pcx = &x; + + BOOST_TEST( boost::bind< long >( &X::m, _1 )( pcx ) == 17041L ); + BOOST_TEST( boost::bind< long >( &X::m, pcx )() == 17041L ); + + Y y = { "test" }; + std::string v( "test" ); + + BOOST_TEST( boost::bind< char const* >( &Y::m, &y )() == v ); + BOOST_TEST( boost::bind< std::string >( &Y::m, &y )() == v ); + + return boost::report_errors(); +}