mirror of
https://github.com/boostorg/smart_ptr.git
synced 2025-10-05 04:01:04 +02:00
Compare commits
12 Commits
boost-1.73
...
feature/pe
Author | SHA1 | Date | |
---|---|---|---|
|
02cc561248 | ||
|
066b398114 | ||
|
9c43c69c14 | ||
|
eb8998cd91 | ||
|
0ddfab493c | ||
|
a2732e207a | ||
|
5be7523ebe | ||
|
2320dafc03 | ||
|
7ab4093f46 | ||
|
296c203135 | ||
|
2dd35e5fbc | ||
|
977544feda |
13
.travis.yml
13
.travis.yml
@@ -299,6 +299,19 @@ matrix:
|
|||||||
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
||||||
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
dist: xenial
|
||||||
|
compiler: clang++-10
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-10 CXXSTD=03,11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-10
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-8
|
compiler: clang++-8
|
||||||
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
@@ -21,11 +21,12 @@ public:
|
|||||||
count_ = shared_count(base);
|
count_ = shared_count(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT {
|
void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
shared_count().swap(count_);
|
shared_count().swap(count_);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT {
|
shared_count local_cb_get_shared_count() const
|
||||||
|
BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
return count_;
|
return count_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -206,28 +206,29 @@ public:
|
|||||||
return state_;
|
return state_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void dispose() BOOST_SP_NOEXCEPT {
|
void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
boost::alloc_destroy_n(state_.allocator(),
|
boost::alloc_destroy_n(state_.allocator(),
|
||||||
boost::first_scalar(sp_array_start<type>(this)),
|
boost::first_scalar(sp_array_start<type>(this)),
|
||||||
state_.size() * sp_array_count<type>::value);
|
state_.size() * sp_array_count<type>::value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void destroy() BOOST_SP_NOEXCEPT {
|
void destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
sp_array_creator<allocator, sp_array_base> other(state_.allocator(),
|
sp_array_creator<allocator, sp_array_base> other(state_.allocator(),
|
||||||
state_.size());
|
state_.size());
|
||||||
this->~sp_array_base();
|
this->~sp_array_base();
|
||||||
other.destroy(this);
|
other.destroy(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* get_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT {
|
void* get_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* get_local_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT {
|
void* get_local_deleter(const sp_typeinfo_&)
|
||||||
|
BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* get_untyped_deleter() BOOST_SP_NOEXCEPT {
|
void* get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -47,7 +47,7 @@ class bad_weak_ptr: public std::exception
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual char const * what() const BOOST_NOEXCEPT_OR_NOTHROW
|
virtual char const * what() const BOOST_NOEXCEPT_OR_NOTHROW BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return "tr1::bad_weak_ptr";
|
return "tr1::bad_weak_ptr";
|
||||||
}
|
}
|
||||||
|
@@ -113,12 +113,12 @@ public:
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT
|
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT
|
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return pn_;
|
return pn_;
|
||||||
}
|
}
|
||||||
@@ -130,12 +130,12 @@ public:
|
|||||||
|
|
||||||
shared_count pn_;
|
shared_count pn_;
|
||||||
|
|
||||||
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT
|
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
shared_count().swap( pn_ );
|
shared_count().swap( pn_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT
|
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return pn_;
|
return pn_;
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,16 @@ namespace boost
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# pragma clang diagnostic push
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__) && defined(__has_warning)
|
||||||
|
# if __has_warning( "-Wc11-extensions" )
|
||||||
|
# pragma clang diagnostic ignored "-Wc11-extensions"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef _Atomic( boost::int_least32_t ) atomic_int_least32_t;
|
typedef _Atomic( boost::int_least32_t ) atomic_int_least32_t;
|
||||||
|
|
||||||
inline void atomic_increment( atomic_int_least32_t * pw ) BOOST_SP_NOEXCEPT
|
inline void atomic_increment( atomic_int_least32_t * pw ) BOOST_SP_NOEXCEPT
|
||||||
@@ -61,7 +71,6 @@ inline boost::int_least32_t atomic_conditional_increment( atomic_int_least32_t *
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
# pragma clang diagnostic push
|
|
||||||
# pragma clang diagnostic ignored "-Wweak-vtables"
|
# pragma clang diagnostic ignored "-Wweak-vtables"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -85,7 +85,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void dispose() BOOST_SP_NOEXCEPT
|
virtual void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
|
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
|
||||||
boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
|
boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
|
||||||
@@ -93,17 +93,17 @@ public:
|
|||||||
boost::checked_delete( px_ );
|
boost::checked_delete( px_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT
|
virtual void * get_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_local_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT
|
virtual void * get_local_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT
|
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -168,22 +168,22 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void dispose() BOOST_SP_NOEXCEPT
|
virtual void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
del( ptr );
|
del( ptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT
|
virtual void * get_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return ti == BOOST_SP_TYPEID_(D)? &reinterpret_cast<char&>( del ): 0;
|
return ti == BOOST_SP_TYPEID_(D)? &reinterpret_cast<char&>( del ): 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_local_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT
|
virtual void * get_local_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return ti == BOOST_SP_TYPEID_(D)? boost::detail::get_local_deleter( boost::addressof( del ) ): 0;
|
return ti == BOOST_SP_TYPEID_(D)? boost::detail::get_local_deleter( boost::addressof( del ) ): 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT
|
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
|
||||||
{
|
{
|
||||||
return &reinterpret_cast<char&>( del );
|
return &reinterpret_cast<char&>( del );
|
||||||
}
|
}
|
||||||
|
@@ -359,3 +359,10 @@ run wp_guides_test.cpp ;
|
|||||||
|
|
||||||
compile-fail shared_from_fail.cpp ;
|
compile-fail shared_from_fail.cpp ;
|
||||||
compile-fail weak_from_fail.cpp ;
|
compile-fail weak_from_fail.cpp ;
|
||||||
|
|
||||||
|
compile sp_override_test.cpp ;
|
||||||
|
compile sp_pedantic_test.cpp
|
||||||
|
: <warnings>pedantic
|
||||||
|
<toolset>msvc:<warnings-as-errors>on
|
||||||
|
<toolset>gcc:<warnings-as-errors>on
|
||||||
|
<toolset>clang:<warnings-as-errors>on ;
|
||||||
|
18
test/sp_override_test.cpp
Normal file
18
test/sp_override_test.cpp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2020 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// https://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && __GNUC__ >= 5 && __cplusplus >= 201103L
|
||||||
|
# pragma GCC diagnostic error "-Wsuggest-override"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/smart_ptr.hpp>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
boost::shared_ptr<int> p1( new int );
|
||||||
|
boost::shared_ptr<int[]> p2( new int[1] );
|
||||||
|
|
||||||
|
boost::make_shared<int>();
|
||||||
|
boost::make_shared<int[]>( 1 );
|
||||||
|
}
|
14
test/sp_pedantic_test.cpp
Normal file
14
test/sp_pedantic_test.cpp
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// Copyright 2020 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// https://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#include <boost/smart_ptr.hpp>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
boost::shared_ptr<int> p1( new int );
|
||||||
|
boost::shared_ptr<int[]> p2( new int[1] );
|
||||||
|
|
||||||
|
boost::make_shared<int>();
|
||||||
|
boost::make_shared<int[]>( 1 );
|
||||||
|
}
|
Reference in New Issue
Block a user