diff --git a/doc/container.qbk b/doc/container.qbk index 60db13b..582476f 100644 --- a/doc/container.qbk +++ b/doc/container.qbk @@ -1338,6 +1338,13 @@ use [*Boost.Container]? There are several reasons for that: [section:release_notes Release Notes] +[section:release_notes_boost_1_78_00 Boost 1.78 Release] + +* Fixed bugs/issues: + * [@https://github.com/boostorg/container/issues/188 GitHub #188: ['"Build fails when RTTI is disabled"]]. + +[endsect] + [section:release_notes_boost_1_77_00 Boost 1.77 Release] * Fixed bugs/issues: diff --git a/include/boost/container/detail/pool_resource.hpp b/include/boost/container/detail/pool_resource.hpp index e5f59f5..87eecac 100644 --- a/include/boost/container/detail/pool_resource.hpp +++ b/include/boost/container/detail/pool_resource.hpp @@ -100,7 +100,7 @@ class pool_resource //! Effects: Calls //! `this->release()`. - virtual ~pool_resource(); + ~pool_resource(); //! Effects: Calls Calls `upstream_resource()->deallocate()` as necessary //! to release all allocated memory. [ Note: memory is released back to @@ -131,18 +131,14 @@ class pool_resource //! using `upstream_resource()->allocate()`. //! //! Throws: Nothing unless `upstream_resource()->allocate()` throws. - virtual void* do_allocate(std::size_t bytes, std::size_t alignment); + void* do_allocate(std::size_t bytes, std::size_t alignment); //! Effects: Return the memory at p to the pool. It is unspecified if or under //! what circumstances this operation will result in a call to //! `upstream_resource()->deallocate()`. //! //! Throws: Nothing. - virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment); - - //! Returns: - //! `this == dynamic_cast(&other)`. - virtual bool do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT; + void do_deallocate(void* p, std::size_t bytes, std::size_t alignment); //Non-standard observers public: diff --git a/src/monotonic_buffer_resource.cpp b/src/monotonic_buffer_resource.cpp index f625f65..5507ef2 100644 --- a/src/monotonic_buffer_resource.cpp +++ b/src/monotonic_buffer_resource.cpp @@ -166,7 +166,7 @@ void monotonic_buffer_resource::do_deallocate(void* p, std::size_t bytes, std::s { (void)p; (void)bytes; (void)alignment; } bool monotonic_buffer_resource::do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT -{ return this == dynamic_cast(&other); } +{ return this == &other; } } //namespace pmr { } //namespace container { diff --git a/src/pool_resource.cpp b/src/pool_resource.cpp index e6829e2..82105a4 100644 --- a/src/pool_resource.cpp +++ b/src/pool_resource.cpp @@ -176,7 +176,7 @@ pool_resource::pool_resource(const pool_options& opts) BOOST_NOEXCEPT : m_options(opts), m_upstream(*get_default_resource()), m_oversized_list(), m_pool_data(), m_pool_count() { this->priv_constructor_body(); } -pool_resource::~pool_resource() //virtual +pool_resource::~pool_resource() { this->release(); @@ -203,7 +203,7 @@ memory_resource* pool_resource::upstream_resource() const pool_options pool_resource::options() const { return m_options; } -void* pool_resource::do_allocate(std::size_t bytes, std::size_t alignment) //virtual +void* pool_resource::do_allocate(std::size_t bytes, std::size_t alignment) { if(!m_pool_data){ this->priv_init_pools(); @@ -224,7 +224,7 @@ void* pool_resource::do_allocate(std::size_t bytes, std::size_t alignment) //vir } } -void pool_resource::do_deallocate(void* p, std::size_t bytes, std::size_t alignment) //virtual +void pool_resource::do_deallocate(void* p, std::size_t bytes, std::size_t alignment) { (void)alignment; //alignment ignored here, max_align is used by pools if(bytes > m_options.largest_required_pool_block){ @@ -237,10 +237,6 @@ void pool_resource::do_deallocate(void* p, std::size_t bytes, std::size_t alignm } } -bool pool_resource::do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT //virtual -{ return this == dynamic_cast(&other); } - - std::size_t pool_resource::pool_count() const { if(BOOST_LIKELY((0 != m_pool_data))){ diff --git a/src/synchronized_pool_resource.cpp b/src/synchronized_pool_resource.cpp index 0a725e9..21c40a9 100644 --- a/src/synchronized_pool_resource.cpp +++ b/src/synchronized_pool_resource.cpp @@ -87,7 +87,7 @@ void synchronized_pool_resource::do_deallocate(void* p, std::size_t bytes, std:: } bool synchronized_pool_resource::do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT //virtual -{ return this == dynamic_cast(&other); } +{ return this == &other; } std::size_t synchronized_pool_resource::pool_count() const { return m_pool_resource.pool_count(); } diff --git a/src/unsynchronized_pool_resource.cpp b/src/unsynchronized_pool_resource.cpp index 0c84f69..9ce7fef 100644 --- a/src/unsynchronized_pool_resource.cpp +++ b/src/unsynchronized_pool_resource.cpp @@ -55,7 +55,7 @@ void unsynchronized_pool_resource::do_deallocate(void* p, std::size_t bytes, std { return m_resource.do_deallocate(p, bytes, alignment); } bool unsynchronized_pool_resource::do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT //virtual -{ return this == dynamic_cast(&other); } +{ return this == &other; } std::size_t unsynchronized_pool_resource::pool_count() const { return m_resource.pool_count(); }