sp_unary_addr_test added (reported by Scott French)

[SVN r38137]
This commit is contained in:
Peter Dimov
2007-07-04 16:35:44 +00:00
parent ed8db8b5f2
commit ecb41cb150
4 changed files with 66 additions and 2 deletions

View File

@ -147,7 +147,7 @@ public:
virtual void * get_deleter( std::type_info const & ti )
{
return ti == typeid(D)? &del: 0;
return ti == typeid(D)? &reinterpret_cast<char&>( del ): 0;
}
#if defined(BOOST_SP_USE_STD_ALLOCATOR)
@ -217,7 +217,7 @@ public:
virtual void * get_deleter( std::type_info const & ti )
{
return ti == typeid( D )? &d_: 0;
return ti == typeid( D )? &reinterpret_cast<char&>( d_ ): 0;
}
};

View File

@ -37,6 +37,7 @@ DEPENDS all : smart_ptr ;
[ run shared_ptr_rv_test.cpp ]
[ run shared_ptr_move_test.cpp ]
[ compile-fail shared_ptr_pv_fail.cpp ]
[ run sp_unary_addr_test.cpp ]
;
# this one is too slow to run unless explicitly requested, and ALL

View File

@ -32,5 +32,6 @@ import testing ;
[ run shared_ptr_rv_test.cpp ]
[ run shared_ptr_move_test.cpp ]
[ compile-fail shared_ptr_pv_fail.cpp ]
[ run sp_unary_addr_test.cpp ]
;
}

View File

@ -0,0 +1,62 @@
//
// sp_unary_addr_test.cpp
//
// Copyright (c) 2007 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/shared_ptr.hpp>
#include <boost/detail/lightweight_test.hpp>
#include <memory>
struct deleter
{
private:
void operator& ();
void operator& () const;
public:
int data;
deleter(): data( 17041 )
{
}
void operator()( void * )
{
}
};
struct X
{
};
int main()
{
X x;
{
boost::shared_ptr<X> p( &x, deleter() );
deleter * q = boost::get_deleter<deleter>( p );
BOOST_TEST( q != 0 );
BOOST_TEST( q != 0 && q->data == 17041 );
}
{
boost::shared_ptr<X> p( &x, deleter(), std::allocator<X>() );
deleter * q = boost::get_deleter<deleter>( p );
BOOST_TEST( q != 0 );
BOOST_TEST( q != 0 && q->data == 17041 );
}
return boost::report_errors();
}