### Internet protocol requirements

A type `X` meets the `InternetProtocol` requirements if it satisfies the requirements of `AcceptableProtocol`, as well as the additional requirements listed below.

In the table below, `a` denotes a (possibly const) value of type `X`, and `b` denotes a (possibly const) value of type `X`.

Table 21. InternetProtocol requirements

expression | return type | assertion/note pre/post-conditions
--- | --- | ---
`X::resolver` | `ip::basic_resolver<X>` | The type of a resolver for the protocol.
`X::v4()` | `X` | Returns an object representing the IP version 4 protocol.
`X::v6()` | `X` | Returns an object representing the IP version 6 protocol.
`a == b` | convertible to `bool` | Returns `true` if `a` and `b` represent the same IP protocol version, otherwise `false`.
`a != b` | convertible to `bool` | Returns `!(a == b)`.