Add string_view overloads for the make_network*() functions.
diff --git a/asio/include/asio/ip/impl/network_v4.ipp b/asio/include/asio/ip/impl/network_v4.ipp
index 8c3a629..ec39aae 100644
--- a/asio/include/asio/ip/impl/network_v4.ipp
+++ b/asio/include/asio/ip/impl/network_v4.ipp
@@ -182,6 +182,21 @@
       std::atoi(str.substr(pos + 1).c_str()));
 }
 
+#if defined(ASIO_HAS_STD_STRING_VIEW)
+
+network_v4 make_network_v4(string_view str)
+{
+  return make_network_v4(static_cast<std::string>(str));
+}
+
+network_v4 make_network_v4(string_view str,
+    asio::error_code& ec)
+{
+  return make_network_v4(static_cast<std::string>(str), ec);
+}
+
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
+
 } // namespace ip
 } // namespace asio
 
diff --git a/asio/include/asio/ip/impl/network_v6.ipp b/asio/include/asio/ip/impl/network_v6.ipp
index 06fe449..c2418e3 100644
--- a/asio/include/asio/ip/impl/network_v6.ipp
+++ b/asio/include/asio/ip/impl/network_v6.ipp
@@ -151,6 +151,21 @@
       std::atoi(str.substr(pos + 1).c_str()));
 }
 
+#if defined(ASIO_HAS_STD_STRING_VIEW)
+
+network_v6 make_network_v6(string_view str)
+{
+  return make_network_v6(static_cast<std::string>(str));
+}
+
+network_v6 make_network_v6(string_view str,
+    asio::error_code& ec)
+{
+  return make_network_v6(static_cast<std::string>(str), ec);
+}
+
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
+
 } // namespace ip
 } // namespace asio
 
diff --git a/asio/include/asio/ip/network_v4.hpp b/asio/include/asio/ip/network_v4.hpp
index 6068384..5980b8e 100644
--- a/asio/include/asio/ip/network_v4.hpp
+++ b/asio/include/asio/ip/network_v4.hpp
@@ -18,6 +18,7 @@
 
 #include "asio/detail/config.hpp"
 #include <string>
+#include "asio/detail/string_view.hpp"
 #include "asio/error_code.hpp"
 #include "asio/ip/address_v4_range.hpp"
 
@@ -206,6 +207,27 @@
 ASIO_DECL network_v4 make_network_v4(
     const std::string& str, asio::error_code& ec);
 
+#if defined(ASIO_HAS_STD_STRING_VIEW) \
+  || defined(GENERATING_DOCUMENTATION)
+
+/// Create an IPv4 network from a string containing IP address and prefix
+/// length.
+/**
+ * @relates network_v4
+ */
+ASIO_DECL network_v4 make_network_v4(string_view str);
+
+/// Create an IPv4 network from a string containing IP address and prefix
+/// length.
+/**
+ * @relates network_v4
+ */
+ASIO_DECL network_v4 make_network_v4(
+    string_view str, asio::error_code& ec);
+
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
+       //  || defined(GENERATING_DOCUMENTATION)
+
 #if !defined(ASIO_NO_IOSTREAM)
 
 /// Output a network as a string.
diff --git a/asio/include/asio/ip/network_v6.hpp b/asio/include/asio/ip/network_v6.hpp
index d2e88ea..4e07dbb 100644
--- a/asio/include/asio/ip/network_v6.hpp
+++ b/asio/include/asio/ip/network_v6.hpp
@@ -18,6 +18,7 @@
 
 #include "asio/detail/config.hpp"
 #include <string>
+#include "asio/detail/string_view.hpp"
 #include "asio/error_code.hpp"
 #include "asio/ip/address_v6_range.hpp"
 
@@ -180,6 +181,27 @@
 ASIO_DECL network_v6 make_network_v6(
     const std::string& str, asio::error_code& ec);
 
+#if defined(ASIO_HAS_STD_STRING_VIEW) \
+  || defined(GENERATING_DOCUMENTATION)
+
+/// Create an IPv6 network from a string containing IP address and prefix
+/// length.
+/**
+ * @relates network_v6
+ */
+ASIO_DECL network_v6 make_network_v6(string_view str);
+
+/// Create an IPv6 network from a string containing IP address and prefix
+/// length.
+/**
+ * @relates network_v6
+ */
+ASIO_DECL network_v6 make_network_v6(
+    string_view str, asio::error_code& ec);
+
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
+       //  || defined(GENERATING_DOCUMENTATION)
+
 #if !defined(ASIO_NO_IOSTREAM)
 
 /// Output a network as a string.
diff --git a/asio/src/tests/unit/ip/network_v4.cpp b/asio/src/tests/unit/ip/network_v4.cpp
index 32aad5c..2e43822 100644
--- a/asio/src/tests/unit/ip/network_v4.cpp
+++ b/asio/src/tests/unit/ip/network_v4.cpp
@@ -86,6 +86,23 @@
     bool b4 = (net1 != net2);
     (void)b4;
 
+    // network_v4 creation functions.
+
+    net1 = ip::make_network_v4(ip::address_v4(), 24);
+    net1 = ip::make_network_v4(ip::address_v4(), ip::address_v4());
+    net1 = ip::make_network_v4("10.0.0.0/8");
+    net1 = ip::make_network_v4("10.0.0.0/8", ec);
+    net1 = ip::make_network_v4(s1);
+    net1 = ip::make_network_v4(s1, ec);
+#if defined(ASIO_HAS_STD_STRING_VIEW)
+# if defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    std::experimental::string_view string_view_value("10.0.0.0/8");
+# else // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    std::string_view string_view_value("10.0.0.0/8");
+# endif // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    net1 = ip::make_network_v4(string_view_value);
+    net1 = ip::make_network_v4(string_view_value, ec);
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
   }
   catch (std::exception&)
   {
diff --git a/asio/src/tests/unit/ip/network_v6.cpp b/asio/src/tests/unit/ip/network_v6.cpp
index 839adc0..477b0c7 100644
--- a/asio/src/tests/unit/ip/network_v6.cpp
+++ b/asio/src/tests/unit/ip/network_v6.cpp
@@ -79,6 +79,22 @@
     bool b4 = (net1 != net2);
     (void)b4;
 
+    // network_v6 creation functions.
+
+    net1 = ip::make_network_v6(ip::address_v6(), 24);
+    net1 = ip::make_network_v6("10.0.0.0/8");
+    net1 = ip::make_network_v6("10.0.0.0/8", ec);
+    net1 = ip::make_network_v6(s1);
+    net1 = ip::make_network_v6(s1, ec);
+#if defined(ASIO_HAS_STD_STRING_VIEW)
+# if defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    std::experimental::string_view string_view_value("0::0/8");
+# else // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    std::string_view string_view_value("0::0/8");
+# endif // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+    net1 = ip::make_network_v6(string_view_value);
+    net1 = ip::make_network_v6(string_view_value, ec);
+#endif // defined(ASIO_HAS_STD_STRING_VIEW)
   }
   catch (std::exception&)
   {