mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-09 17:43:57 +00:00
[libc++][NFC] Mark LWG3573 as complete
Mark LWG3573 as complete. It involves a change in wording around when `basic_string_view`'s constructor for iterator/sentinel can throw. The current implementation is not marked conditionally `noexcept`, so there is nothing to do here. Add a test that binds this behavior to verify the constructor is not marked `noexcept(true)` when `end - begin` throws. Reviewed By: ldionne, Mordante, #libc Differential Revision: https://reviews.llvm.org/D111925
This commit is contained in:
parent
a039746e1c
commit
494dad6b72
@ -125,7 +125,7 @@
|
||||
`3570 <https://wg21.link/LWG3570>`__,"``basic_osyncstream::emit`` should be an unformatted output function","October 2021","",""
|
||||
`3571 <https://wg21.link/LWG3571>`__,"``flush_emit`` should set ``badbit`` if the ``emit`` call fails","October 2021","",""
|
||||
`3572 <https://wg21.link/LWG3572>`__,"``copyable-box`` should be fully ``constexpr``","October 2021","","","|ranges|"
|
||||
`3573 <https://wg21.link/LWG3573>`__,"Missing Throws element for ``basic_string_view(It begin, End end)``","October 2021","",""
|
||||
`3573 <https://wg21.link/LWG3573>`__,"Missing Throws element for ``basic_string_view(It begin, End end)``","October 2021","|Complete|","14.0"
|
||||
`3574 <https://wg21.link/LWG3574>`__,"``common_iterator`` should be completely ``constexpr``-able","October 2021","","","|ranges|"
|
||||
`3580 <https://wg21.link/LWG3580>`__,"``iota_view``'s ``iterator``'s binary ``operator+`` should be improved","October 2021","","","|ranges|"
|
||||
`3581 <https://wg21.link/LWG3581>`__,"The range constructor makes ``basic_string_view`` not trivially move constructible","October 2021","","","|ranges|"
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -16,6 +16,7 @@
|
||||
|
||||
#include <string_view>
|
||||
#include <cassert>
|
||||
#include <iterator>
|
||||
#include <ranges>
|
||||
|
||||
#include "make_string.h"
|
||||
@ -43,6 +44,36 @@ constexpr bool test() {
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifndef TEST_HAS_NO_EXCEPTIONS
|
||||
template<class CharT>
|
||||
struct ThrowingSentinel {
|
||||
friend bool operator==(const CharT*, ThrowingSentinel) noexcept { return true; }
|
||||
friend std::iter_difference_t<const CharT*> operator-(const CharT*, ThrowingSentinel) noexcept { return {}; }
|
||||
friend std::iter_difference_t<const CharT*> operator-(ThrowingSentinel, const CharT*) { throw 42; }
|
||||
};
|
||||
|
||||
template <class CharT>
|
||||
void test_throwing() {
|
||||
auto val = MAKE_STRING_VIEW(CharT, "test");
|
||||
try {
|
||||
(void)std::basic_string_view<CharT>(val.begin(), ThrowingSentinel<CharT>());
|
||||
assert(false);
|
||||
} catch (int i) {
|
||||
assert(i == 42);
|
||||
}
|
||||
}
|
||||
|
||||
void test_throwing() {
|
||||
test_throwing<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test_throwing<wchar_t>();
|
||||
#endif
|
||||
test_throwing<char8_t>();
|
||||
test_throwing<char16_t>();
|
||||
test_throwing<char32_t>();
|
||||
}
|
||||
#endif
|
||||
|
||||
static_assert( std::is_constructible_v<std::string_view, const char*, char*>);
|
||||
static_assert( std::is_constructible_v<std::string_view, char*, const char*>);
|
||||
static_assert(!std::is_constructible_v<std::string_view, char*, void*>); // not a sentinel
|
||||
@ -54,6 +85,10 @@ int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
#ifndef TEST_HAS_NO_EXCEPTIONS
|
||||
test_throwing();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user