1
0
forked from boostorg/bind

Add ref_compare for weak_ptr. Refs #2849.

[SVN r51979]
This commit is contained in:
Peter Dimov
2009-03-26 00:43:14 +00:00
parent bc50ab0ba3
commit 45a1f1434b
3 changed files with 55 additions and 0 deletions

View File

@@ -48,6 +48,8 @@
namespace boost
{
template<class T> class weak_ptr;
namespace _bi // implementation details
{
@@ -126,6 +128,13 @@ private:
T t_;
};
// ref_compare for weak_ptr
template<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int )
{
return !(a.get() < b.get()) && !(b.get() < a.get());
}
// type
template<class T> class type {};

View File

@@ -41,4 +41,5 @@ test-suite "bind"
[ run bind_eq2_test.cpp ]
[ run mem_fn_ref_test.cpp ]
[ run bind_ref_test.cpp ]
[ run bind_eq3_test.cpp ]
;

45
test/bind_eq3_test.cpp Normal file
View File

@@ -0,0 +1,45 @@
#include <boost/config.hpp>
#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_eq3_test.cpp - function_equal with bind and weak_ptr
//
// Copyright (c) 2004, 2005, 2009 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 <boost/bind.hpp>
#include <boost/function_equal.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/detail/lightweight_test.hpp>
int f( boost::weak_ptr<void> wp )
{
return wp.use_count();
}
template< class F > void test_self_equal( F f )
{
#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
using boost::function_equal;
#endif
BOOST_TEST( function_equal( f, f ) );
}
int main()
{
test_self_equal( boost::bind( f, _1 ) );
test_self_equal( boost::bind( f, boost::weak_ptr<void>() ) );
return boost::report_errors();
}