An object of type basic_endpoint<InternetProtocol> represents a protocol-specific endpoint, where an endpoint consists of an IP address and port number. Endpoints may be used to identify sources and destinations for socket connections and datagrams.
namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {
  template<class InternetProtocol>
  class basic_endpoint
  {
  public:
    // types:
    using protocol_type = InternetProtocol;
    // [internet.endpoint.cons], constructors:
    constexpr basic_endpoint() noexcept;
    constexpr basic_endpoint(const protocol_type& proto,
                             port_type port_num) noexcept;
    constexpr basic_endpoint(const ip::address& addr,
                             port_type port_num) noexcept;
    // [internet.endpoint.members], members:
    constexpr protocol_type protocol() const noexcept;
    constexpr ip::address address() const noexcept;
    void address(const ip::address& addr) noexcept;
    constexpr port_type port() const noexcept;
    void port(port_type port_num) noexcept;
  };
  // [internet.endpoint.comparisons], basic_endpoint comparisons:
  template<class InternetProtocol>
    constexpr bool operator==(const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  template<class InternetProtocol>
    constexpr bool operator!=(const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  template<class InternetProtocol>
    constexpr bool operator< (const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  template<class InternetProtocol>
    constexpr bool operator> (const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  template<class InternetProtocol>
    constexpr bool operator<=(const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  template<class InternetProtocol>
    constexpr bool operator>=(const basic_endpoint<InternetProtocol>& a,
                              const basic_endpoint<InternetProtocol>& b) noexcept;
  // [internet.endpoint.io], basic_endpoint I/O:
  template<class CharT, class Traits, class InternetProtocol>
    basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const basic_endpoint<InternetProtocol>& ep);
} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std
Instances of the basic_endpoint class template meet the requirements for an Endpoint ([socket.reqmts.endpoint]).
Extensible implementations provide the following member functions:
namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {
  template<class InternetProtocol>
  class basic_endpoint
  {
  public:
    void* data() noexcept;
    const void* data() const noexcept;
    constexpr size_t size() const noexcept;
    void resize(size_t s);
    constexpr size_t capacity() const noexcept;
    // remainder unchanged
  private:
    union
    {
      sockaddr_in v4_;
      sockaddr_in6 v6_;
    } data_; // exposition only
  };
} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std
constexpr basic_endpoint() noexcept;
Postconditions: this->address() == ip::address() and port() == 0.
constexpr basic_endpoint(const protocol_type& proto,
                         port_type port_num) noexcept;
Requires: proto == protocol_type::v4() || proto == protocol_type::v6().
constexpr basic_endpoint(const ip::address& addr,
                         port_type port_num) noexcept;
Postconditions: this->address() == addr and port() == port_num.
constexpr protocol_type protocol() const noexcept;
Returns: protocol_type::v6() if the expression this->address().is_v6() is true, otherwise protocol_type::v4().
constexpr ip::address address() const noexcept;
Returns: The address associated with the endpoint.
void address(const ip::address& addr) noexcept;
Postconditions: this->address() == addr.
constexpr port_type port() const noexcept;
Returns: The port number associated with the endpoint.
void port(port_type port_num) noexcept;
Postconditions: port() == port_num.
template<class InternetProtocol>
  constexpr bool operator==(const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: a.address() == b.address() && a.port() == b.port()).
template<class InternetProtocol>
  constexpr bool operator!=(const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(a == b).
template<class InternetProtocol>
  constexpr bool operator< (const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: tie(a.address(), a.port()) < tie(b.address(), b.port()).
template<class InternetProtocol>
  constexpr bool operator> (const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: b < a.
template<class InternetProtocol>
  constexpr bool operator<=(const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(b < a).
template<class InternetProtocol>
  constexpr bool operator>=(const basic_endpoint<InternetProtocol>& a,
                            const basic_endpoint<InternetProtocol>& b) noexcept;
Returns: !(a < b).
template<class CharT, class Traits, class InternetProtocol>
  basic_ostream<CharT, Traits>& operator<<(
    basic_ostream<CharT, Traits>& os,
    const basic_endpoint<InternetProtocol>& ep);
Effects: Outputs a representation of the endpoint to the stream, as if it were implemented as follows:
basic_ostringstream<CharT, Traits> ss; if (ep.protocol() == basic_endpoint<InternetProtocol>::protocol_type::v6()) ss << "[" << ep.address() << "]"; else ss << ep.address(); ss << ":" << ep.port(); os << ss.str();
Returns: os.
[ Note: The representation of the endpoint when it contains an IP version 6 address is based on [RFC2732]. — end note ]
void* data() noexcept;
Returns: addressof(data_).
const void* data() const noexcept;
Returns: addressof(data_).
constexpr size_t size() const noexcept;
Returns: sizeof(sockaddr_in6) if protocol().family() == AF_INET6, otherwise sizeof(sockaddr_in).
void resize(size_t s);
constexpr size_t capacity() const noexcept;
Returns: sizeof(data_).