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(); }