Add more tests; fix errors

This commit is contained in:
Peter Dimov
2017-06-20 20:38:26 +03:00
parent 052ebd1946
commit fb17bf685e
9 changed files with 321 additions and 8 deletions
@@ -766,6 +766,10 @@ public:
return ti == BOOST_SP_TYPEID(deleter_type)? &reinterpret_cast<char&>(deleter_): 0;
}
void* get_local_deleter(const sp_typeinfo&) {
return 0;
}
void* get_untyped_deleter() {
return &reinterpret_cast<char&>(deleter_);
}
@@ -807,6 +811,10 @@ public:
return ti == BOOST_SP_TYPEID(deleter_type)? &reinterpret_cast<char&>(deleter_): 0;
}
void* get_local_deleter(const sp_typeinfo&) {
return 0;
}
void* get_untyped_deleter() {
return &reinterpret_cast<char&>(deleter_);
}
@@ -853,6 +861,10 @@ public:
return ti == BOOST_SP_TYPEID(deleter_type)? &reinterpret_cast<char&>(deleter_): 0;
}
void* get_local_deleter(const sp_typeinfo&) {
return 0;
}
void* get_untyped_deleter() {
return &reinterpret_cast<char&>(deleter_);
}
@@ -898,6 +910,10 @@ public:
return ti == BOOST_SP_TYPEID(deleter_type)? &reinterpret_cast<char&>(deleter_): 0;
}
void* get_local_deleter(const sp_typeinfo&) {
return 0;
}
void* get_untyped_deleter() {
return &reinterpret_cast<char&>(deleter_);
}
@@ -70,9 +70,18 @@ public:
#endif
};
template<> class local_sp_deleter<void>
{
};
template<class D> D * get_local_deleter( local_sp_deleter<D> * p )
{
return &p->deleter();
return &p->deleter();
}
inline void * get_local_deleter( local_sp_deleter<void> * /*p*/ )
{
return 0;
}
} // namespace detail
@@ -26,6 +26,7 @@
#include <boost/checked_delete.hpp>
#include <boost/smart_ptr/detail/sp_counted_base.hpp>
#include <boost/core/addressof.hpp>
#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
#include <boost/smart_ptr/detail/quick_allocator.hpp>
@@ -54,7 +55,7 @@ namespace detail
template<class D> class local_sp_deleter;
template<class D> D * get_local_deleter( D * p )
template<class D> D * get_local_deleter( D * /*p*/ )
{
return 0;
}
@@ -178,7 +179,7 @@ public:
virtual void * get_local_deleter( sp_typeinfo const & ti )
{
return ti == BOOST_SP_TYPEID(D)? boost::detail::get_local_deleter( &reinterpret_cast<char&>( del ) ): 0;
return ti == BOOST_SP_TYPEID(D)? boost::detail::get_local_deleter( boost::addressof( del ) ): 0;
}
virtual void * get_untyped_deleter()
@@ -271,7 +272,7 @@ public:
virtual void * get_local_deleter( sp_typeinfo const & ti )
{
return ti == BOOST_SP_TYPEID(D)? boost::detail::get_local_deleter( &reinterpret_cast<char&>( d_ ) ): 0;
return ti == BOOST_SP_TYPEID(D)? boost::detail::get_local_deleter( boost::addressof( d_ ) ): 0;
}
virtual void * get_untyped_deleter()
@@ -28,12 +28,12 @@ template<class T> struct lsp_if_array
template<class T> struct lsp_if_array<T[]>
{
typedef boost::local_shared_ptr<T> type;
typedef boost::local_shared_ptr<T[]> type;
};
template<class T, std::size_t N> struct lsp_if_array<T[N]>
{
typedef boost::local_shared_ptr<T> type;
typedef boost::local_shared_ptr<T[N]> type;
};
} // namespace detail