A type X meets the InternetProtocol requirements if it satisfies the requirements of AcceptableProtocol ([socket.reqmts.acceptableprotocol]), as well as the additional requirements listed below.
In the table below, a and b denote (possibly const) values of type X.
| 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). |