From c7710aad38b370719257a651262e20720b653163 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Fri, 18 Mar 2005 18:16:18 +0000 Subject: [PATCH] mem_fn_dm_test added; removed an unconditional MW workaround in mem_fn [SVN r27736] --- include/boost/mem_fn.hpp | 2 +- test/Jamfile | 1 + test/Jamfile.v2 | 2 +- test/mem_fn_dm_test.cpp | 67 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 test/mem_fn_dm_test.cpp diff --git a/include/boost/mem_fn.hpp b/include/boost/mem_fn.hpp index 6b9c16d..7097d43 100644 --- a/include/boost/mem_fn.hpp +++ b/include/boost/mem_fn.hpp @@ -357,7 +357,7 @@ public: return call(u, &u); } -#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200) R & operator()(T & t) const { diff --git a/test/Jamfile b/test/Jamfile index 73ec742..269f2cc 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -31,5 +31,6 @@ DEPENDS all : bind ; [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] [ run mem_fn_eq_test.cpp ] + [ run mem_fn_dm_test.cpp ] ; } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 9bea1bc..e5d0592 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -25,5 +25,5 @@ test-suite "bind" [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] [ run mem_fn_eq_test.cpp ] + [ run mem_fn_dm_test.cpp ] ; - diff --git a/test/mem_fn_dm_test.cpp b/test/mem_fn_dm_test.cpp new file mode 100644 index 0000000..88fe428 --- /dev/null +++ b/test/mem_fn_dm_test.cpp @@ -0,0 +1,67 @@ +#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 + +// +// mem_fn_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; +}; + +int main() +{ + X x = { 0 }; + + boost::mem_fn( &X::m )( x ) = 401; + + BOOST_TEST( x.m == 401 ); + BOOST_TEST( boost::mem_fn( &X::m )( x ) == 401 ); + + boost::mem_fn( &X::m )( &x ) = 502; + + BOOST_TEST( x.m == 502 ); + BOOST_TEST( boost::mem_fn( &X::m )( &x ) == 502 ); + + X * px = &x; + + boost::mem_fn( &X::m )( px ) = 603; + + BOOST_TEST( x.m == 603 ); + BOOST_TEST( boost::mem_fn( &X::m )( px ) == 603 ); + + X const & cx = x; + X const * pcx = &x; + + BOOST_TEST( boost::mem_fn( &X::m )( cx ) == 603 ); + BOOST_TEST( boost::mem_fn( &X::m )( pcx ) == 603 ); + + return boost::report_errors(); +}