diff --git a/include/boost/system/detail/error_code.hpp b/include/boost/system/detail/error_code.hpp index 7d0dcda..1189fb4 100644 --- a/include/boost/system/detail/error_code.hpp +++ b/include/boost/system/detail/error_code.hpp @@ -58,12 +58,14 @@ namespace system // and error_code containing a pointer to an object of a type derived // from error_category. +bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT; std::size_t hash_value( error_code const & ec ); class error_code { private: + friend bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT; friend std::size_t hash_value( error_code const & ec ); private: @@ -438,48 +440,6 @@ public: return !( lhs == rhs ); } - inline friend bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT - { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - - if( code.lc_flags_ == 1 ) - { - return static_cast( code ) == static_cast( condition ); - } - else - -#endif - { - return code.category().equivalent( code.value(), condition ) || condition.category().equivalent( code, condition.value() ); - } - } - - inline friend bool operator==( const error_condition & condition, const error_code & code ) BOOST_NOEXCEPT - { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - - if( code.lc_flags_ == 1 ) - { - return static_cast( code ) == static_cast( condition ); - } - else - -#endif - { - return code.category().equivalent( code.value(), condition ) || condition.category().equivalent( code, condition.value() ); - } - } - - inline friend bool operator!=( const error_code & lhs, const error_condition & rhs ) BOOST_NOEXCEPT - { - return !( lhs == rhs ); - } - - inline friend bool operator!=( const error_condition & lhs, const error_code & rhs ) BOOST_NOEXCEPT - { - return !( lhs == rhs ); - } - #if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) inline friend bool operator==( std::error_code const & lhs, error_code const & rhs ) BOOST_NOEXCEPT @@ -682,6 +642,37 @@ public: } }; +inline bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT +{ +#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) + + if( code.lc_flags_ == 1 ) + { + return static_cast( code ) == static_cast( condition ); + } + else + +#endif + { + return code.category().equivalent( code.value(), condition ) || condition.category().equivalent( code, condition.value() ); + } +} + +inline bool operator==( const error_condition & condition, const error_code & code ) BOOST_NOEXCEPT +{ + return code == condition; +} + +inline bool operator!=( const error_code & lhs, const error_condition & rhs ) BOOST_NOEXCEPT +{ + return !( lhs == rhs ); +} + +inline bool operator!=( const error_condition & lhs, const error_code & rhs ) BOOST_NOEXCEPT +{ + return !( lhs == rhs ); +} + inline std::size_t hash_value( error_code const & ec ) { #if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) diff --git a/test/error_code_test3.cpp b/test/error_code_test3.cpp index 1c987b6..54d1468 100644 --- a/test/error_code_test3.cpp +++ b/test/error_code_test3.cpp @@ -56,8 +56,8 @@ int main() BOOST_TEST_EQ( ec, enomem_n ); BOOST_TEST_EQ( enomem_n, ec ); - // BOOST_TEST_EQ( en, enomem_c ); - // BOOST_TEST_EQ( enomem_c, en ); + BOOST_TEST_EQ( en, enomem_c ); + BOOST_TEST_EQ( enomem_c, en ); return boost::report_errors(); }