diff --git a/libcxx/docs/Status/Cxx2bIssues.csv b/libcxx/docs/Status/Cxx2bIssues.csv --- a/libcxx/docs/Status/Cxx2bIssues.csv +++ b/libcxx/docs/Status/Cxx2bIssues.csv @@ -125,7 +125,7 @@ `3570 `__,"``basic_osyncstream::emit`` should be an unformatted output function","October 2021","","" `3571 `__,"``flush_emit`` should set ``badbit`` if the ``emit`` call fails","October 2021","","" `3572 `__,"``copyable-box`` should be fully ``constexpr``","October 2021","","" -`3573 `__,"Missing Throws element for ``basic_string_view(It begin, End end)``","October 2021","","" +`3573 `__,"Missing Throws element for ``basic_string_view(It begin, End end)``","October 2021","|Complete|","14.0" `3574 `__,"``common_iterator`` should be completely ``constexpr``-able","October 2021","","" `3580 `__,"``iota_view``'s ``iterator``'s binary ``operator+`` should be improved","October 2021","","" `3581 `__,"The range constructor makes ``basic_string_view`` not trivially move constructible","October 2021","","" diff --git a/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp --- a/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp +++ b/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include "make_string.h" @@ -43,6 +44,28 @@ return true; } +template +struct throwing_sized_sentinel : public sized_sentinel { + using sized_sentinel::sized_sentinel; +}; + +template +constexpr std::iter_difference_t operator-(throwing_sized_sentinel, std::input_or_output_iterator auto) { + throw std::runtime_error("LWG 3573"); + return {}; +} + +template +constexpr bool test_noexcept() { + auto val = MAKE_STRING_VIEW(CharT, "test"); + try { + auto sv = std::basic_string_view(val.begin(), Sentinel(val.end())); + } catch (const std::runtime_error&) { + return true; + } + return false; +} + static_assert( std::is_constructible_v); static_assert( std::is_constructible_v); static_assert(!std::is_constructible_v); // not a sentinel @@ -54,6 +77,8 @@ test(); static_assert(test()); + assert((test_noexcept>())); + return 0; }