From cc5c59c7a5e2e871221714748fab19f3e79b51f1 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 24 Apr 2020 15:10:57 -0400 Subject: [PATCH] Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero. --- .../boost/container/pmr/memory_resource.hpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/boost/container/pmr/memory_resource.hpp b/include/boost/container/pmr/memory_resource.hpp index 5ca2d73..2436bb0 100644 --- a/include/boost/container/pmr/memory_resource.hpp +++ b/include/boost/container/pmr/memory_resource.hpp @@ -52,6 +52,8 @@ class BOOST_CONTAINER_DECL memory_resource //! `return return do_is_equal(other);` bool is_equal(const memory_resource& other) const BOOST_NOEXCEPT { return this->do_is_equal(other); } + + #if !defined(BOOST_EMBTC) //! Returns: //! `&a == &b || a.is_equal(b)`. @@ -62,6 +64,18 @@ class BOOST_CONTAINER_DECL memory_resource //! !(a == b). friend bool operator!=(const memory_resource& a, const memory_resource& b) BOOST_NOEXCEPT { return !(a == b); } + + #else + + //! Returns: + //! `&a == &b || a.is_equal(b)`. + friend bool operator==(const memory_resource& a, const memory_resource& b) BOOST_NOEXCEPT; + + //! Returns: + //! !(a == b). + friend bool operator!=(const memory_resource& a, const memory_resource& b) BOOST_NOEXCEPT; + + #endif protected: //! Requires: Alignment shall be a power of two. @@ -93,6 +107,20 @@ class BOOST_CONTAINER_DECL memory_resource virtual bool do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT = 0; }; +#if defined(BOOST_EMBTC) + +//! Returns: +//! `&a == &b || a.is_equal(b)`. +inline bool operator==(const memory_resource& a, const memory_resource& b) BOOST_NOEXCEPT +{ return &a == &b || a.is_equal(b); } + +//! Returns: +//! !(a == b). +inline bool operator!=(const memory_resource& a, const memory_resource& b) BOOST_NOEXCEPT +{ return !(a == b); } + +#endif + } //namespace pmr { } //namespace container { } //namespace boost {