Revert "Change ip::address default constructor to be not-an-address."

This reverts commit d8a2f7087d0f7954ec83f17d23519835959c13bd.
diff --git a/asio/include/asio/ip/address.hpp b/asio/include/asio/ip/address.hpp
index 7cddee2..ad20c45 100644
--- a/asio/include/asio/ip/address.hpp
+++ b/asio/include/asio/ip/address.hpp
@@ -179,7 +179,7 @@
   }
 
   // The type of the address.
-  enum { none, ipv4, ipv6 } type_;
+  enum { ipv4, ipv6 } type_;
 
   // The underlying IPv4 address.
   asio::ip::address_v4 ipv4_address_;
diff --git a/asio/include/asio/ip/basic_endpoint.hpp b/asio/include/asio/ip/basic_endpoint.hpp
index f4c9bdc..a1bae97 100644
--- a/asio/include/asio/ip/basic_endpoint.hpp
+++ b/asio/include/asio/ip/basic_endpoint.hpp
@@ -124,9 +124,9 @@
   /// The protocol associated with the endpoint.
   protocol_type protocol() const
   {
-    if (impl_.is_v6())
-      return InternetProtocol::v6();
-    return InternetProtocol::v4();
+    if (impl_.is_v4())
+      return InternetProtocol::v4();
+    return InternetProtocol::v6();
   }
 
   /// Get the underlying endpoint in the native type.
diff --git a/asio/include/asio/ip/detail/endpoint.hpp b/asio/include/asio/ip/detail/endpoint.hpp
index 42b8f89..847ca4c 100644
--- a/asio/include/asio/ip/detail/endpoint.hpp
+++ b/asio/include/asio/ip/detail/endpoint.hpp
@@ -111,12 +111,6 @@
     return data_.base.sa_family == ASIO_OS_DEF(AF_INET);
   }
 
-  // Determine whether the endpoint is IPv6.
-  bool is_v6() const
-  {
-    return data_.base.sa_family == ASIO_OS_DEF(AF_INET6);
-  }
-
 #if !defined(ASIO_NO_IOSTREAM)
   // Convert to a string.
   ASIO_DECL std::string to_string(asio::error_code& ec) const;
diff --git a/asio/include/asio/ip/detail/impl/endpoint.ipp b/asio/include/asio/ip/detail/impl/endpoint.ipp
index b2ca0d6..dc3e6b3 100644
--- a/asio/include/asio/ip/detail/impl/endpoint.ipp
+++ b/asio/include/asio/ip/detail/impl/endpoint.ipp
@@ -50,7 +50,7 @@
       asio::detail::socket_ops::host_to_network_short(port_num);
     data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY);
   }
-  else if (family == ASIO_OS_DEF(AF_INET6))
+  else
   {
     data_.v6.sin6_family = ASIO_OS_DEF(AF_INET6);
     data_.v6.sin6_port =
@@ -66,13 +66,6 @@
     data_.v6.sin6_addr.s6_addr[14] = 0, data_.v6.sin6_addr.s6_addr[15] = 0;
     data_.v6.sin6_scope_id = 0;
   }
-  else
-  {
-    data_.v4.sin_family = ASIO_OS_DEF(AF_UNSPEC);
-    data_.v4.sin_port =
-      asio::detail::socket_ops::host_to_network_short(port_num);
-    data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY);
-  }
 }
 
 endpoint::endpoint(const asio::ip::address& addr,
@@ -90,7 +83,7 @@
           static_cast<asio::detail::u_long_type>(
             address_cast<address_v4>(addr).to_ulong()));
   }
-  else if (addr.is_v6())
+  else
   {
     data_.v6.sin6_family = ASIO_OS_DEF(AF_INET6);
     data_.v6.sin6_port =
@@ -103,18 +96,11 @@
       static_cast<asio::detail::u_long_type>(
         v6_addr.scope_id());
   }
-  else
-  {
-    data_.v4.sin_family = ASIO_OS_DEF(AF_UNSPEC);
-    data_.v4.sin_port =
-      asio::detail::socket_ops::host_to_network_short(port_num);
-    data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY);
-  }
 }
 
 void endpoint::resize(std::size_t new_size)
 {
-  if (new_size > sizeof(data_))
+  if (new_size > sizeof(asio::detail::sockaddr_storage_type))
   {
     asio::error_code ec(asio::error::invalid_argument);
     asio::detail::throw_error(ec);
@@ -123,28 +109,28 @@
 
 unsigned short endpoint::port() const
 {
-  if (is_v6())
+  if (is_v4())
   {
     return asio::detail::socket_ops::network_to_host_short(
-        data_.v6.sin6_port);
+        data_.v4.sin_port);
   }
   else
   {
     return asio::detail::socket_ops::network_to_host_short(
-        data_.v4.sin_port);
+        data_.v6.sin6_port);
   }
 }
 
 void endpoint::port(unsigned short port_num)
 {
-  if (is_v6())
+  if (is_v4())
   {
-    data_.v6.sin6_port
+    data_.v4.sin_port
       = asio::detail::socket_ops::host_to_network_short(port_num);
   }
   else
   {
-    data_.v4.sin_port
+    data_.v6.sin6_port
       = asio::detail::socket_ops::host_to_network_short(port_num);
   }
 }
@@ -158,7 +144,7 @@
         asio::detail::socket_ops::network_to_host_long(
           data_.v4.sin_addr.s_addr));
   }
-  else if (is_v6())
+  else
   {
     asio::ip::address_v6::bytes_type bytes;
 #if defined(ASIO_HAS_STD_ARRAY)
@@ -168,10 +154,6 @@
 #endif // defined(ASIO_HAS_STD_ARRAY)
     return asio::ip::address_v6(bytes, data_.v6.sin6_scope_id);
   }
-  else
-  {
-    return asio::ip::address();
-  }
 }
 
 void endpoint::address(const asio::ip::address& addr)
diff --git a/asio/include/asio/ip/impl/address.ipp b/asio/include/asio/ip/impl/address.ipp
index e7745b4..664c53d 100644
--- a/asio/include/asio/ip/impl/address.ipp
+++ b/asio/include/asio/ip/impl/address.ipp
@@ -30,7 +30,7 @@
 namespace ip {
 
 address::address()
-  : type_(none),
+  : type_(ipv4),
     ipv4_address_(),
     ipv6_address_()
 {
@@ -158,81 +158,46 @@
 
 std::string address::to_string() const
 {
-  switch (type_)
-  {
-  case ipv4:
-    return ipv4_address_.to_string();
-  case ipv6:
+  if (type_ == ipv6)
     return ipv6_address_.to_string();
-  default:
-    bad_address_cast ex;
-    asio::detail::throw_exception(ex);
-    return std::string();
-  }
+  return ipv4_address_.to_string();
 }
 
 std::string address::to_string(asio::error_code& ec) const
 {
-  switch (type_)
-  {
-  case ipv4:
-    return ipv4_address_.to_string(ec);
-  case ipv6:
+  if (type_ == ipv6)
     return ipv6_address_.to_string(ec);
-  default:
-    ec = asio::error::invalid_argument;
-    return std::string();
-  }
+  return ipv4_address_.to_string(ec);
 }
 
 bool address::is_loopback() const
 {
-  switch (type_)
-  {
-  case ipv4:
-    return ipv4_address_.is_loopback();
-  case ipv6:
-    return ipv6_address_.is_loopback();
-  default:
-    return false;
-  }
+  return (type_ == ipv4)
+    ? ipv4_address_.is_loopback()
+    : ipv6_address_.is_loopback();
 }
 
 bool address::is_unspecified() const
 {
-  switch (type_)
-  {
-  case ipv4:
-    return ipv4_address_.is_unspecified();
-  case ipv6:
-    return ipv6_address_.is_unspecified();
-  default:
-    return false;
-  }
+  return (type_ == ipv4)
+    ? ipv4_address_.is_unspecified()
+    : ipv6_address_.is_unspecified();
 }
 
 bool address::is_multicast() const
 {
-  switch (type_)
-  {
-  case ipv4:
-    return ipv4_address_.is_multicast();
-  case ipv6:
-    return ipv6_address_.is_multicast();
-  default:
-    return false;
-  }
+  return (type_ == ipv4)
+    ? ipv4_address_.is_multicast()
+    : ipv6_address_.is_multicast();
 }
 
 bool operator==(const address& a1, const address& a2)
 {
   if (a1.type_ != a2.type_)
     return false;
-  if (a1.type_ == address::ipv4)
-    return a1.ipv4_address_ == a2.ipv4_address_;
   if (a1.type_ == address::ipv6)
     return a1.ipv6_address_ == a2.ipv6_address_;
-  return true;
+  return a1.ipv4_address_ == a2.ipv4_address_;
 }
 
 bool operator<(const address& a1, const address& a2)
@@ -241,11 +206,9 @@
     return true;
   if (a1.type_ > a2.type_)
     return false;
-  if (a1.type_ == address::ipv4)
-    return a1.ipv4_address_ < a2.ipv4_address_;
   if (a1.type_ == address::ipv6)
     return a1.ipv6_address_ < a2.ipv6_address_;
-  return false;
+  return a1.ipv4_address_ < a2.ipv4_address_;
 }
 
 } // namespace ip