The class address is a version-independent representation for an IP address. An object of class address holds either an IPv4 address, an IPv6 address, or no valid address.
namespace std { namespace experimental { namespace net { inline namespace v1 { namespace ip { class address { public: // [internet.address.cons], constructors: constexpr address() noexcept; constexpr address(const address& a) noexcept; constexpr address(const address_v4& a) noexcept; constexpr address(const address_v6& a) noexcept; // [internet.address.assign], assignment: address& operator=(const address& a) noexcept; address& operator=(const address_v4& a) noexcept; address& operator=(const address_v6& a) noexcept; // [internet.address.members], members: constexpr bool is_v4() const noexcept; constexpr bool is_v6() const noexcept; constexpr address_v4 to_v4() const; constexpr address_v6 to_v6() const; constexpr bool is_unspecified() const noexcept; constexpr bool is_loopback() const noexcept; constexpr bool is_multicast() const noexcept; template<class Allocator = allocator<char>> basic_string<char, char_traits<char>, Allocator> to_string(const Allocator& a = Allocator()) const; private: address_v4 v4_; // exposition only address_v6 v6_; // exposition only }; // [internet.address.comparisons], address comparisons: constexpr bool operator==(const address& a, const address& b) noexcept; constexpr bool operator!=(const address& a, const address& b) noexcept; constexpr bool operator< (const address& a, const address& b) noexcept; constexpr bool operator> (const address& a, const address& b) noexcept; constexpr bool operator<=(const address& a, const address& b) noexcept; constexpr bool operator>=(const address& a, const address& b) noexcept; // [internet.address.creation], address creation: address make_address(const char* str); address make_address(const char* str, error_code& ec) noexcept; address make_address(const string& str); address make_address(const string& str, error_code& ec) noexcept; address make_address(string_view str); address make_address(string_view str, error_code& ec) noexcept; // [internet.address.io], address I/O: template<class CharT, class Traits> basic_ostream<CharT, Traits>& operator<<( basic_ostream<CharT, Traits>& os, const address& addr); } // namespace ip } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
address satisfies the requirements for Destructible (C++ 2014 [destructible]), CopyConstructible (C++ 2014 [copyconstructible]), and CopyAssignable (C++ 2014 [copyassignable]).
constexpr address() noexcept;
Postconditions: is_v4() == true, is_v6() == false, and is_unspecified() == true.
constexpr address(const address_v4& a) noexcept;
Effects: Initializes v4_ with a.
Postconditions: is_v4() == true and is_v6() == false.
constexpr address(const address_v6& a) noexcept;
Effects: Initializes v6_ with a.
Postconditions: is_v4() == false and is_v6() == true.
address& operator=(const address_v4& a) noexcept;
Postconditions: is_v4() == true and is_v6() == false and to_v4() == a.
Returns: *this
address& operator=(const address_v6& a) noexcept;
Postconditions: is_v4() == false and is_v6() == true and to_v6() == a.
Returns: *this
constexpr bool is_v4() const noexcept;
Returns: true if the object contains an IP version 4 address, otherwise false.
constexpr bool is_v6() const noexcept;
Returns: true if the object contains an IP version 6 address, otherwise false.
constexpr address_v4 to_v4() const;
Returns: v4_.
Remarks: bad_address_cast if is_v4() == false.
constexpr address_v6 to_v6() const;
Returns: v6_.
Remarks: bad_address_cast if is_v6() == false.
constexpr bool is_unspecified() const noexcept;
Returns: If is_v4(), returns v4_.is_unspecified(). Otherwise returns v6_.is_unspecified().
constexpr bool is_loopback() const noexcept;
Returns: If is_v4(), returns v4_.is_loopback(). Otherwise returns v6_.is_loopback().
constexpr bool is_multicast() const noexcept;
Returns: If is_v4(), returns v4_.is_multicast(). Otherwise returns v6_.is_multicast().
template<class Allocator = allocator<char>>
basic_string<char, char_traits<char>, Allocator>
to_string(const Allocator& a = Allocator()) const;
Returns: If is_v4(), returns v4_.to_string(a). Otherwise returns v6_.to_string(a).
constexpr bool operator==(const address& a, const address& b) noexcept;
constexpr bool operator!=(const address& a, const address& b) noexcept;
Returns: !(a == b).
constexpr bool operator< (const address& a, const address& b) noexcept;
constexpr bool operator> (const address& a, const address& b) noexcept;
Returns: b < a.
constexpr bool operator<=(const address& a, const address& b) noexcept;
Returns: !(b < a).
constexpr bool operator>=(const address& a, const address& b) noexcept;
Returns: !(a < b).
address make_address(const char* str);
address make_address(const char* str, error_code& ec) noexcept;
address make_address(const string& str);
address make_address(const string& str, error_code& ec) noexcept;
address make_address(string_view str);
address make_address(string_view str, error_code& ec) noexcept;
Effects: Converts a textual representation of an address into an object of class address, as if by calling:
address a; address_v6 v6a = make_address_v6(str, ec); if (!ec) a = v6a; else{ address_v4 v4a = make_address_v4(str, ec); if (!ec) a = v4a; }
Returns: a.
template<class CharT, class Traits>
basic_ostream<CharT, Traits>& operator<<(
basic_ostream<CharT, Traits>& os, const address& addr);
Returns: os << addr.to_string().c_str().