diff --git a/include/boost/system/error_code.hpp b/include/boost/system/error_code.hpp index 3ca5426..8dd800b 100644 --- a/include/boost/system/error_code.hpp +++ b/include/boost/system/error_code.hpp @@ -172,10 +172,6 @@ namespace boost static const error_category & errno_ecat = get_posix_category(); static const error_category & native_ecat = get_system_category(); - // EDG with --dep_name requires make_error_condition be defined before use - - template error_condition make_error_condition(T); - // class error_condition -----------------------------------------------// // error_conditions are portable, error_codes are system or lib specific @@ -259,10 +255,6 @@ namespace boost }; - // EDG with --dep_name requires make_error_code be defined before use - - template error_code make_error_code(T); - // class error_code ----------------------------------------------------// // We want error_code to be a value type that can be copied without slicing @@ -408,13 +400,16 @@ namespace boost // make_* functions for posix::posix_errno -----------------------------// - // explicit conversion: - template<> inline error_code make_error_code( posix::posix_errno e ) - { return error_code( e, posix_category ); } + namespace posix + { + // explicit conversion: + inline error_code make_error_code( posix_errno e ) + { return error_code( e, posix_category ); } - // implicit conversion: - template<> inline error_condition make_error_condition( posix::posix_errno e ) - { return error_condition( e, posix_category ); } + // implicit conversion: + inline error_condition make_error_condition( posix_errno e ) + { return error_condition( e, posix_category ); } + } // error_category default implementation -------------------------------// @@ -496,8 +491,11 @@ namespace boost template<> struct is_error_code_enum { static const bool value = true; }; - template<> inline error_code make_error_code(cygwin::cygwin_errno e) - { return error_code( e, system_category ); } + namespace cygwin + { + inline error_code make_error_code( cygwin_errno e ) + { return error_code( e, system_category ); } + } # elif defined(linux) || defined(__linux) || defined(__linux__) @@ -563,8 +561,11 @@ namespace boost template<> struct is_error_code_enum { static const bool value = true; }; - template<> inline error_code make_error_code(Linux::linux_error e) - { return error_code( e, system_category ); } + namespace Linux + { + inline error_code make_error_code( linux_error e ) + { return error_code( e, system_category ); } + } # endif @@ -642,13 +643,17 @@ namespace boost // TODO: add more Windows errors }; + } // namespace windows template<> struct is_error_code_enum { static const bool value = true; }; - template<> inline error_code make_error_code(windows::windows_error e) - { return error_code( e, system_category ); } + namespace windows + { + inline error_code make_error_code( windows_error e ) + { return error_code( e, system_category ); } + } #else # error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined diff --git a/test/error_code_user_test.cpp b/test/error_code_user_test.cpp index 58ddcae..e5c9e79 100644 --- a/test/error_code_user_test.cpp +++ b/test/error_code_user_test.cpp @@ -73,23 +73,26 @@ namespace boost namespace lib3 { // lib3 has its own error_category: - extern const boost::system::error_category & lib3_error_category; + const boost::system::error_category & get_lib3_error_category(); + const boost::system::error_category & lib3_error_category = get_lib3_error_category(); enum error { boo_boo=123, big_boo_boo }; - } namespace system { template<> struct is_error_code_enum { static const bool value = true; }; + } - template<> inline error_code make_error_code(boost::lib3::error e) - { return error_code(e,boost::lib3::lib3_error_category); } + namespace lib3 + { + inline boost::system::error_code make_error_code(error e) + { return boost::system::error_code(e,lib3_error_category); } } } @@ -125,12 +128,14 @@ namespace boost if ( ev == big_boo_boo ) return std::string("big boo boo"); return std::string("unknown error"); } + }; - const lib3_error_category_imp lib3_error_category_const; - - const boost::system::error_category & lib3_error_category - = lib3_error_category_const; + const boost::system::error_category & get_lib3_error_category() + { + static const lib3_error_category_imp l3ecat; + return l3ecat; + } } } @@ -147,7 +152,8 @@ namespace boost namespace lib4 { // lib4 has its own error_category: - extern const boost::system::error_category & lib4_error_category; + const boost::system::error_category & get_lib4_error_category(); + const boost::system::error_category & lib4_error_category = get_lib4_error_category(); extern const boost::system::error_code boo_boo; extern const boost::system::error_code big_boo_boo; @@ -183,10 +189,11 @@ namespace lib4 } }; - const lib4_error_category_imp lib4_error_category_const; - - const boost::system::error_category & lib4_error_category - = lib4_error_category_const; + const boost::system::error_category & get_lib4_error_category() + { + static const lib4_error_category_imp l4ecat; + return l4ecat; + } const boost::system::error_code boo_boo( 456, lib4_error_category ); const boost::system::error_code big_boo_boo( 789, lib4_error_category );