Implement P0403R1 - 'Literal suffixes for basic_string_view'. Requires clang 4.0 (specifically, r290744)

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291457 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/string_view b/include/string_view
index f98bbb5..20a4e06 100644
--- a/include/string_view
+++ b/include/string_view
@@ -156,6 +156,11 @@
   template <> struct hash<u32string_view>;
   template <> struct hash<wstring_view>;
 
+  constexpr basic_string<char>     operator "" s( const char *str,     size_t len ); // C++17
+  constexpr basic_string<wchar_t>  operator "" s( const wchar_t *str,  size_t len ); // C++17
+  constexpr basic_string<char16_t> operator "" s( const char16_t *str, size_t len ); // C++17
+  constexpr basic_string<char32_t> operator "" s( const char32_t *str, size_t len ); // C++17
+
 }  // namespace std
 
 
@@ -749,6 +754,38 @@
     return __do_string_hash(__val.data(), __val.data() + __val.size());
 }
 
+
+#if _LIBCPP_STD_VER > 11 
+inline namespace literals
+{
+  inline namespace string_view_literals
+  {
+    inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+    basic_string_view<char> operator "" sv(const char *__str, size_t __len)
+    {
+        return basic_string_view<char> (__str, __len);
+    }
+
+    inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+    basic_string_view<wchar_t> operator "" sv(const wchar_t *__str, size_t __len)
+    {
+        return basic_string_view<wchar_t> (__str, __len);
+    }
+
+    inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+    basic_string_view<char16_t> operator "" sv(const char16_t *__str, size_t __len)
+    {
+        return basic_string_view<char16_t> (__str, __len);
+    }
+
+    inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+    basic_string_view<char32_t> operator "" sv(const char32_t *__str, size_t __len)
+    {
+        return basic_string_view<char32_t> (__str, __len);
+    }
+  }
+}
+#endif
 _LIBCPP_END_NAMESPACE_STD
 
 #endif // _LIBCPP_STRING_VIEW