Mark string_view's constructor from (ptr,len) as noexcept (an extension). Update...
authorMarshall Clow <mclow.lists@gmail.com>
Tue, 24 Oct 2017 16:30:06 +0000 (16:30 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Tue, 24 Oct 2017 16:30:06 +0000 (16:30 +0000)
llvm-svn: 316456

libcxx/include/string_view
libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp
libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp
libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp
libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp

index c5cc255eb571df55417d9d5891c739a4fc9d42e0..3e112eba6935e4cb47235c911fc42ae387f185c4 100644 (file)
@@ -216,7 +216,7 @@ public:
        basic_string_view& operator=(const basic_string_view&) _NOEXCEPT = default;
 
        _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
-       basic_string_view(const _CharT* __s, size_type __len)
+       basic_string_view(const _CharT* __s, size_type __len) _NOEXCEPT
                : __data(__s), __size(__len)
        {
 // #if _LIBCPP_STD_VER > 11
index ca332801ead951158003d08dbfbf44f1c84e4ca6..79fadf619f2516620d46a662b3fc8ca0977744c9 100644 (file)
@@ -21,6 +21,8 @@ template<typename T>
 void test () {
 #if TEST_STD_VER > 11
     {
+    ASSERT_NOEXCEPT(T());
+
     constexpr T sv1;
     static_assert ( sv1.size() == 0, "" );
     static_assert ( sv1.empty(), "");
index 6c9939340ce2b658cd52acc30a33ee23e96df04a..c98a8bd674b419c3460f5d1d007d15f9bad60d3c 100644 (file)
@@ -30,7 +30,11 @@ size_t StrLen ( const CharT *s ) {
 
 template<typename CharT>
 void test ( const CharT *s ) {
-    std::basic_string_view<CharT> sv1 ( s );
+    typedef std::basic_string_view<CharT> SV;
+//  I'd love to do this, but it would require traits::length() to be noexcept
+//  LIBCPP_ASSERT_NOEXCEPT(SV(s));
+
+    SV sv1 ( s );
     assert ( sv1.size() == StrLen( s ));
     assert ( sv1.data() == s );
     }
index da4d264ae3710eae2a1f984267e9e6f9caa326c5..2e4faab9500527b4ddace920580bfa61c5457140 100644 (file)
 template<typename CharT>
 void test ( const CharT *s, size_t sz ) {
     {
-    std::basic_string_view<CharT> sv1 ( s, sz );
+    typedef std::basic_string_view<CharT> SV;
+    LIBCPP_ASSERT_NOEXCEPT(SV(s, sz));
+
+    SV sv1 ( s, sz );
     assert ( sv1.size() == sz );
     assert ( sv1.data() == s );
     }
index 3ca6ea16f5b886760c5f26f38e4531f81abbbefa..5fad2bfaab140b185a30644746c5578d860571d0 100644 (file)
@@ -24,7 +24,10 @@ struct dummy_char_traits : public std::char_traits<char> {};
 
 template<typename CharT, typename Traits>
 void test ( const std::basic_string<CharT, Traits> &str ) {
-    std::basic_string_view<CharT, Traits> sv1 ( str );
+    typedef std::basic_string_view<CharT, Traits> SV;
+    ASSERT_NOEXCEPT(SV(str));
+
+    SV sv1 ( str );
     assert ( sv1.size() == str.size());
     assert ( sv1.data() == str.data());
 }