Change the resolver implementation to no longer require the typedefs
InternetProtocol::resolver_query and InternetProtocol::resolver_iterator,
as neither typedef is part of the documented InternetProtocol requirements.

The following typedefs are now marked as deprecated:
- icmp::resolver_query
- icmp::resolver_iterator
- tcp::resolver_query
- tcp::resolver_iterator
- udp::resolver_query
- udp::resolver_iterator
diff --git a/asio/include/asio/basic_socket_streambuf.hpp b/asio/include/asio/basic_socket_streambuf.hpp
index 37e98b3..ae0264e 100644
--- a/asio/include/asio/basic_socket_streambuf.hpp
+++ b/asio/include/asio/basic_socket_streambuf.hpp
@@ -50,7 +50,8 @@
 //     init_buffers();
 //     asio::error_code ec;
 //     this->basic_socket<Protocol, StreamSocketService>::close(ec);
-//     typedef typename Protocol::resolver_query resolver_query;
+//     typedef typename Protocol::resolver resolver_type;
+//     typedef typename resolver_type::query resolver_query;
 //     resolver_query query(x1, ..., xn);
 //     resolve_and_connect(query, ec);
 //     return !ec ? this : 0;
@@ -65,7 +66,8 @@
     init_buffers(); \
     asio::error_code ec; \
     this->basic_socket<Protocol, StreamSocketService>::close(ec); \
-    typedef typename Protocol::resolver_query resolver_query; \
+    typedef typename Protocol::resolver resolver_type; \
+    typedef typename resolver_type::query resolver_query; \
     resolver_query query(BOOST_PP_ENUM_PARAMS(n, x)); \
     resolve_and_connect(query, ec); \
     return !ec ? this : 0; \
@@ -258,7 +260,7 @@
       asio::error_code& ec)
   {
     typedef typename Protocol::resolver resolver_type;
-    typedef typename Protocol::resolver_iterator iterator_type;
+    typedef typename resolver_type::iterator iterator_type;
     resolver_type resolver(
         boost::base_from_member<asio::io_service>::member);
     iterator_type i = resolver.resolve(query, ec);
diff --git a/asio/include/asio/detail/resolver_service.hpp b/asio/include/asio/detail/resolver_service.hpp
index 55dc528..562dc10 100644
--- a/asio/include/asio/detail/resolver_service.hpp
+++ b/asio/include/asio/detail/resolver_service.hpp
@@ -26,6 +26,8 @@
 
 #include "asio/error.hpp"
 #include "asio/io_service.hpp"
+#include "asio/ip/basic_resolver_iterator.hpp"
+#include "asio/ip/basic_resolver_query.hpp"
 #include "asio/detail/bind_handler.hpp"
 #include "asio/detail/fenced_block.hpp"
 #include "asio/detail/mutex.hpp"
@@ -80,10 +82,10 @@
   typedef typename Protocol::endpoint endpoint_type;
 
   // The query type.
-  typedef typename Protocol::resolver_query query_type;
+  typedef asio::ip::basic_resolver_query<Protocol> query_type;
 
   // The iterator type.
-  typedef typename Protocol::resolver_iterator iterator_type;
+  typedef asio::ip::basic_resolver_iterator<Protocol> iterator_type;
 
   // Constructor.
   resolver_service(asio::io_service& io_service)
diff --git a/asio/include/asio/ip/basic_resolver.hpp b/asio/include/asio/ip/basic_resolver.hpp
index fb41ab0..43a37af 100644
--- a/asio/include/asio/ip/basic_resolver.hpp
+++ b/asio/include/asio/ip/basic_resolver.hpp
@@ -19,6 +19,8 @@
 
 #include "asio/basic_io_object.hpp"
 #include "asio/error.hpp"
+#include "asio/ip/basic_resolver_iterator.hpp"
+#include "asio/ip/basic_resolver_query.hpp"
 #include "asio/ip/resolver_service.hpp"
 #include "asio/detail/throw_error.hpp"
 
@@ -47,10 +49,10 @@
   typedef typename InternetProtocol::endpoint endpoint_type;
 
   /// The query type.
-  typedef typename InternetProtocol::resolver_query query;
+  typedef basic_resolver_query<InternetProtocol> query;
 
   /// The iterator type.
-  typedef typename InternetProtocol::resolver_iterator iterator;
+  typedef basic_resolver_iterator<InternetProtocol> iterator;
 
   /// Constructor.
   /**
diff --git a/asio/include/asio/ip/icmp.hpp b/asio/include/asio/ip/icmp.hpp
index 84a71d0..d76b4d1 100644
--- a/asio/include/asio/ip/icmp.hpp
+++ b/asio/include/asio/ip/icmp.hpp
@@ -44,10 +44,10 @@
   /// The type of a ICMP endpoint.
   typedef basic_endpoint<icmp> endpoint;
 
-  /// The type of a resolver query.
+  /// (Deprecated: use resolver::query.) The type of a resolver query.
   typedef basic_resolver_query<icmp> resolver_query;
 
-  /// The type of a resolver iterator.
+  /// (Deprecated: use resolver::iterator.) The type of a resolver iterator.
   typedef basic_resolver_iterator<icmp> resolver_iterator;
 
   /// Construct to represent the IPv4 ICMP protocol.
diff --git a/asio/include/asio/ip/resolver_service.hpp b/asio/include/asio/ip/resolver_service.hpp
index 3e7f314..75f6b2c 100644
--- a/asio/include/asio/ip/resolver_service.hpp
+++ b/asio/include/asio/ip/resolver_service.hpp
@@ -19,6 +19,8 @@
 
 #include "asio/error.hpp"
 #include "asio/io_service.hpp"
+#include "asio/ip/basic_resolver_iterator.hpp"
+#include "asio/ip/basic_resolver_query.hpp"
 #include "asio/detail/resolver_service.hpp"
 #include "asio/detail/service_base.hpp"
 
@@ -48,10 +50,10 @@
   typedef typename InternetProtocol::endpoint endpoint_type;
 
   /// The query type.
-  typedef typename InternetProtocol::resolver_query query_type;
+  typedef basic_resolver_query<InternetProtocol> query_type;
 
   /// The iterator type.
-  typedef typename InternetProtocol::resolver_iterator iterator_type;
+  typedef basic_resolver_iterator<InternetProtocol> iterator_type;
 
 private:
   // The type of the platform-specific implementation.
diff --git a/asio/include/asio/ip/tcp.hpp b/asio/include/asio/ip/tcp.hpp
index bead34d..a2e9ac9 100644
--- a/asio/include/asio/ip/tcp.hpp
+++ b/asio/include/asio/ip/tcp.hpp
@@ -47,10 +47,10 @@
   /// The type of a TCP endpoint.
   typedef basic_endpoint<tcp> endpoint;
 
-  /// The type of a resolver query.
+  /// (Deprecated: use resolver::query.) The type of a resolver query.
   typedef basic_resolver_query<tcp> resolver_query;
 
-  /// The type of a resolver iterator.
+  /// (Deprecated: use resolver::iterator.) The type of a resolver iterator.
   typedef basic_resolver_iterator<tcp> resolver_iterator;
 
   /// Construct to represent the IPv4 TCP protocol.
diff --git a/asio/include/asio/ip/udp.hpp b/asio/include/asio/ip/udp.hpp
index c1c62c7..fb26118 100644
--- a/asio/include/asio/ip/udp.hpp
+++ b/asio/include/asio/ip/udp.hpp
@@ -44,10 +44,10 @@
   /// The type of a UDP endpoint.
   typedef basic_endpoint<udp> endpoint;
 
-  /// The type of a resolver query.
+  /// (Deprecated: use resolver::query.) The type of a resolver query.
   typedef basic_resolver_query<udp> resolver_query;
 
-  /// The type of a resolver iterator.
+  /// (Deprecated: use resolver::iterator.) The type of a resolver iterator.
   typedef basic_resolver_iterator<udp> resolver_iterator;
 
   /// Construct to represent the IPv4 UDP protocol.
diff --git a/asio/src/doc/reference.qbk b/asio/src/doc/reference.qbk
index 22acec5..f16e62f 100644
--- a/asio/src/doc/reference.qbk
+++ b/asio/src/doc/reference.qbk
@@ -42584,7 +42584,76 @@
 The iterator type. 
 
 
-  typedef InternetProtocol::resolver_iterator iterator;
+  typedef basic_resolver_iterator< InternetProtocol > iterator;
+
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]]
+    [Default constructor creates an end iterator. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.create [*create]]]
+    [Create an iterator from an addrinfo list returned by getaddrinfo. 
+
+     Create an iterator from an endpoint, host name and service name. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]]
+    [Dereference an iterator. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]]
+    [Increment operator (prefix). 
+
+     Increment operator (postfix). ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]]
+    [Dereference an iterator. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]]
+    [Test two iterators for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]]
+    [Test two iterators for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.ip__basic_resolver_iterator `ip::basic_resolver_iterator`] class template is used to define iterators over the results returned by a resolver.
+
+The iterator's value\_type, obtained when the iterator is dereferenced, is: 
+
+   const basic_resolver_entry<InternetProtocol> 
+
+
+
+
+
+[heading Thread Safety]
+  
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe. 
+
 
 
 
@@ -42626,7 +42695,111 @@
 The query type. 
 
 
-  typedef InternetProtocol::resolver_query query;
+  typedef basic_resolver_query< InternetProtocol > query;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.ip__basic_resolver_query.flags [*flags]]]
+    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.ip__basic_resolver_query.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint query. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.basic_resolver_query [*basic_resolver_query]]]
+    [Construct with specified service name for any protocol. 
+
+     Construct with specified service name for a given protocol. 
+
+     Construct with specified host name and service name for any protocol. 
+
+     Construct with specified host name and service name for a given protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.hints [*hints]]]
+    [Get the hints associated with the query. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.host_name [*host_name]]]
+    [Get the host name associated with the query. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.service_name [*service_name]]]
+    [Get the service name associated with the query. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.address_configured [*address_configured]]]
+    [Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
+    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
+    [Determine the canonical name of the host specified in the query. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.numeric_host [*numeric_host]]]
+    [Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.numeric_service [*numeric_service]]]
+    [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.passive [*passive]]]
+    [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.v4_mapped [*v4_mapped]]]
+    [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ]
+  ]
+
+]
+
+The [link asio.reference.ip__basic_resolver_query `ip::basic_resolver_query`] class template describes a query that can be passed to a resolver.
+
+
+[heading Thread Safety]
+  
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe. 
+
 
 
 
@@ -43934,14 +44107,14 @@
   [
 
     [[link asio.reference.ip__icmp.resolver_iterator [*resolver_iterator]]]
-    [The type of a resolver iterator. ]
+    [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ]
   
   ]
 
   [
 
     [[link asio.reference.ip__icmp.resolver_query [*resolver_query]]]
-    [The type of a resolver query. ]
+    [(Deprecated: use resolver::query.) The type of a resolver query. ]
   
   ]
 
@@ -44377,7 +44550,7 @@
 [section:resolver_iterator ip::icmp::resolver_iterator]
 
 [indexterm2 resolver_iterator..ip::icmp] 
-The type of a resolver iterator. 
+(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. 
 
 
   typedef basic_resolver_iterator< icmp > resolver_iterator;
@@ -44467,7 +44640,7 @@
 [section:resolver_query ip::icmp::resolver_query]
 
 [indexterm2 resolver_query..ip::icmp] 
-The type of a resolver query. 
+(Deprecated: use `resolver::query`.) The type of a resolver query. 
 
 
   typedef basic_resolver_query< icmp > resolver_query;
@@ -45793,7 +45966,76 @@
 The iterator type. 
 
 
-  typedef InternetProtocol::resolver_iterator iterator_type;
+  typedef basic_resolver_iterator< InternetProtocol > iterator_type;
+
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]]
+    [Default constructor creates an end iterator. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.create [*create]]]
+    [Create an iterator from an addrinfo list returned by getaddrinfo. 
+
+     Create an iterator from an endpoint, host name and service name. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]]
+    [Dereference an iterator. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]]
+    [Increment operator (prefix). 
+
+     Increment operator (postfix). ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]]
+    [Dereference an iterator. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]]
+    [Test two iterators for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]]
+    [Test two iterators for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.ip__basic_resolver_iterator `ip::basic_resolver_iterator`] class template is used to define iterators over the results returned by a resolver.
+
+The iterator's value\_type, obtained when the iterator is dereferenced, is: 
+
+   const basic_resolver_entry<InternetProtocol> 
+
+
+
+
+
+[heading Thread Safety]
+  
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe. 
+
 
 
 
@@ -45835,7 +46077,111 @@
 The query type. 
 
 
-  typedef InternetProtocol::resolver_query query_type;
+  typedef basic_resolver_query< InternetProtocol > query_type;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.ip__basic_resolver_query.flags [*flags]]]
+    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.ip__basic_resolver_query.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint query. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.basic_resolver_query [*basic_resolver_query]]]
+    [Construct with specified service name for any protocol. 
+
+     Construct with specified service name for a given protocol. 
+
+     Construct with specified host name and service name for any protocol. 
+
+     Construct with specified host name and service name for a given protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.hints [*hints]]]
+    [Get the hints associated with the query. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.host_name [*host_name]]]
+    [Get the host name associated with the query. ]
+  ]
+  
+  [
+    [[link asio.reference.ip__basic_resolver_query.service_name [*service_name]]]
+    [Get the service name associated with the query. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.address_configured [*address_configured]]]
+    [Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
+    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
+    [Determine the canonical name of the host specified in the query. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.numeric_host [*numeric_host]]]
+    [Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.numeric_service [*numeric_service]]]
+    [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.passive [*passive]]]
+    [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ]
+  ]
+
+  [
+    [[link asio.reference.ip__basic_resolver_query.v4_mapped [*v4_mapped]]]
+    [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ]
+  ]
+
+]
+
+The [link asio.reference.ip__basic_resolver_query `ip::basic_resolver_query`] class template describes a query that can be passed to a resolver.
+
+
+[heading Thread Safety]
+  
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe. 
+
 
 
 
@@ -45990,14 +46336,14 @@
   [
 
     [[link asio.reference.ip__tcp.resolver_iterator [*resolver_iterator]]]
-    [The type of a resolver iterator. ]
+    [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ]
   
   ]
 
   [
 
     [[link asio.reference.ip__tcp.resolver_query [*resolver_query]]]
-    [The type of a resolver query. ]
+    [(Deprecated: use resolver::query.) The type of a resolver query. ]
   
   ]
 
@@ -46862,7 +47208,7 @@
 [section:resolver_iterator ip::tcp::resolver_iterator]
 
 [indexterm2 resolver_iterator..ip::tcp] 
-The type of a resolver iterator. 
+(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. 
 
 
   typedef basic_resolver_iterator< tcp > resolver_iterator;
@@ -46952,7 +47298,7 @@
 [section:resolver_query ip::tcp::resolver_query]
 
 [indexterm2 resolver_query..ip::tcp] 
-The type of a resolver query. 
+(Deprecated: use `resolver::query`.) The type of a resolver query. 
 
 
   typedef basic_resolver_query< tcp > resolver_query;
@@ -47537,14 +47883,14 @@
   [
 
     [[link asio.reference.ip__udp.resolver_iterator [*resolver_iterator]]]
-    [The type of a resolver iterator. ]
+    [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ]
   
   ]
 
   [
 
     [[link asio.reference.ip__udp.resolver_query [*resolver_query]]]
-    [The type of a resolver query. ]
+    [(Deprecated: use resolver::query.) The type of a resolver query. ]
   
   ]
 
@@ -47980,7 +48326,7 @@
 [section:resolver_iterator ip::udp::resolver_iterator]
 
 [indexterm2 resolver_iterator..ip::udp] 
-The type of a resolver iterator. 
+(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. 
 
 
   typedef basic_resolver_iterator< udp > resolver_iterator;
@@ -48070,7 +48416,7 @@
 [section:resolver_query ip::udp::resolver_query]
 
 [indexterm2 resolver_query..ip::udp] 
-The type of a resolver query. 
+(Deprecated: use `resolver::query`.) The type of a resolver query. 
 
 
   typedef basic_resolver_query< udp > resolver_query;