diff options
-rw-r--r-- | libstdc++-v3/include/experimental/internet | 50 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/socket | 74 |
2 files changed, 59 insertions, 65 deletions
diff --git a/libstdc++-v3/include/experimental/internet b/libstdc++-v3/include/experimental/internet index 2e3fd06..1196176 100644 --- a/libstdc++-v3/include/experimental/internet +++ b/libstdc++-v3/include/experimental/internet @@ -1660,38 +1660,38 @@ namespace ip static constexpr flags all_matching = (flags)AI_ALL; static constexpr flags address_configured = (flags)AI_ADDRCONFIG; - protected: - resolver_base() = default; - ~resolver_base() = default; - }; + friend constexpr flags + operator&(flags __f1, flags __f2) noexcept + { return flags( int(__f1) & int(__f2) ); } - constexpr resolver_base::flags - operator&(resolver_base::flags __f1, resolver_base::flags __f2) noexcept - { return resolver_base::flags( int(__f1) & int(__f2) ); } + friend constexpr flags + operator|(flags __f1, flags __f2) noexcept + { return flags( int(__f1) | int(__f2) ); } - constexpr resolver_base::flags - operator|(resolver_base::flags __f1, resolver_base::flags __f2) noexcept - { return resolver_base::flags( int(__f1) | int(__f2) ); } + friend constexpr flags + operator^(flags __f1, flags __f2) noexcept + { return flags( int(__f1) ^ int(__f2) ); } - constexpr resolver_base::flags - operator^(resolver_base::flags __f1, resolver_base::flags __f2) noexcept - { return resolver_base::flags( int(__f1) ^ int(__f2) ); } + friend constexpr flags + operator~(flags __f) noexcept + { return flags( ~int(__f) ); } - constexpr resolver_base::flags - operator~(resolver_base::flags __f) noexcept - { return resolver_base::flags( ~int(__f) ); } + friend constexpr flags& + operator&=(flags& __f1, flags __f2) noexcept + { return __f1 = (__f1 & __f2); } - constexpr resolver_base::flags& - operator&=(resolver_base::flags& __f1, resolver_base::flags __f2) noexcept - { return __f1 = (__f1 & __f2); } + friend constexpr flags& + operator|=(flags& __f1, flags __f2) noexcept + { return __f1 = (__f1 | __f2); } - constexpr resolver_base::flags& - operator|=(resolver_base::flags& __f1, resolver_base::flags __f2) noexcept - { return __f1 = (__f1 | __f2); } + friend constexpr flags& + operator^=(flags& __f1, flags __f2) noexcept + { return __f1 = (__f1 ^ __f2); } - constexpr resolver_base::flags& - operator^=(resolver_base::flags& __f1, resolver_base::flags __f2) noexcept - { return __f1 = (__f1 ^ __f2); } + protected: + resolver_base() = default; + ~resolver_base() = default; + }; // TODO define resolver_base::flags static constants in .so for C++14 mode diff --git a/libstdc++-v3/include/experimental/socket b/libstdc++-v3/include/experimental/socket index 18849f6..bf6a8c8 100644 --- a/libstdc++-v3/include/experimental/socket +++ b/libstdc++-v3/include/experimental/socket @@ -319,13 +319,38 @@ inline namespace v1 = (message_flags)MSG_DONTROUTE; static const int max_listen_connections = SOMAXCONN; -#endif - protected: - socket_base() = default; - ~socket_base() = default; + // message_flags bitmask operations are defined as hidden friends. -#ifdef _GLIBCXX_HAVE_SYS_SOCKET_H + friend constexpr message_flags + operator&(message_flags __f1, message_flags __f2) noexcept + { return message_flags( int(__f1) & int(__f2) ); } + + friend constexpr message_flags + operator|(message_flags __f1, message_flags __f2) noexcept + { return message_flags( int(__f1) | int(__f2) ); } + + friend constexpr message_flags + operator^(message_flags __f1, message_flags __f2) noexcept + { return message_flags( int(__f1) ^ int(__f2) ); } + + friend constexpr message_flags + operator~(message_flags __f) noexcept + { return message_flags( ~int(__f) ); } + + friend constexpr message_flags& + operator&=(message_flags& __f1, message_flags __f2) noexcept + { return __f1 = (__f1 & __f2); } + + friend constexpr message_flags& + operator|=(message_flags& __f1, message_flags __f2) noexcept + { return __f1 = (__f1 | __f2); } + + friend constexpr message_flags& + operator^=(message_flags& __f1, message_flags __f2) noexcept + { return __f1 = (__f1 ^ __f2); } + + protected: struct __msg_hdr : ::msghdr { #ifdef IOV_MAX @@ -382,42 +407,11 @@ inline namespace v1 } }; #endif - }; - constexpr socket_base::message_flags - operator&(socket_base::message_flags __f1, socket_base::message_flags __f2) - noexcept - { return socket_base::message_flags( int(__f1) & int(__f2) ); } - - constexpr socket_base::message_flags - operator|(socket_base::message_flags __f1, socket_base::message_flags __f2) - noexcept - { return socket_base::message_flags( int(__f1) | int(__f2) ); } - - constexpr socket_base::message_flags - operator^(socket_base::message_flags __f1, socket_base::message_flags __f2) - noexcept - { return socket_base::message_flags( int(__f1) ^ int(__f2) ); } - - constexpr socket_base::message_flags - operator~(socket_base::message_flags __f) - noexcept - { return socket_base::message_flags( ~int(__f) ); } - - constexpr socket_base::message_flags& - operator&=(socket_base::message_flags& __f1, socket_base::message_flags __f2) - noexcept - { return __f1 = (__f1 & __f2); } - - constexpr socket_base::message_flags& - operator|=(socket_base::message_flags& __f1, socket_base::message_flags __f2) - noexcept - { return __f1 = (__f1 | __f2); } - - constexpr socket_base::message_flags& - operator^=(socket_base::message_flags& __f1, socket_base::message_flags __f2) - noexcept - { return __f1 = (__f1 ^ __f2); } + protected: + socket_base() = default; + ~socket_base() = default; + }; // TODO define socket_base static constants in .so for C++14 mode |