diff --git a/libcxx/include/iterator b/libcxx/include/iterator --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -53,6 +53,10 @@ template concept indirectly_readable = see below; // since C++20 +// [iterator.concept.writable], concept indirectly_­writable +template + concept indirectly_writable = see below; // since C++20 + template struct iterator @@ -2535,6 +2539,16 @@ template concept indirectly_readable = __indirectly_readable_impl>; +// [iterator.concept.writable] +template +concept indirectly_writable = + requires(_Out&& __o, _Tp&& __t) { + *__o = _VSTD::forward<_Tp>(__t); // not required to be equality-preserving + *_VSTD::forward<_Out>(__o) = _VSTD::forward<_Tp>(__t); // not required to be equality-preserving + const_cast&&>(*__o) = _VSTD::forward<_Tp>(__t); // not required to be equality-preserving + const_cast&&>(*_VSTD::forward<_Out>(__o)) = _VSTD::forward<_Tp>(__t); // not required to be equality-preserving + }; + #undef _LIBCPP_NOEXCEPT_RETURN #endif // !defined(_LIBCPP_HAS_NO_RANGES) diff --git a/libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,16 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, std::map::iterator::value_type>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert( + !std::indirectly_writable::const_iterator, std::map::const_iterator::value_type>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert( + !std::indirectly_writable::reverse_iterator, std::map::reverse_iterator::value_type>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, + std::map::const_reverse_iterator::value_type>); diff --git a/libcxx/test/std/containers/associative/multimap/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/multimap/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/associative/multimap/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/associative/multimap/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,17 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert( + !std::indirectly_writable::iterator, std::multimap::iterator::value_type>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, + std::multimap::const_iterator::value_type>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(!std::indirectly_writable::reverse_iterator, + std::multimap::reverse_iterator::value_type>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, + std::multimap::const_reverse_iterator::value_type>); diff --git a/libcxx/test/std/containers/associative/multiset/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/multiset/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/associative/multiset/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/associative/multiset/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(!std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/associative/set/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/associative/set/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/associative/set/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/associative/set/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(!std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/sequences/array/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/array/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/sequences/array/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/sequences/array/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/sequences/deque/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/deque/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/sequences/deque/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/sequences/deque/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.iter/iterator_concept_conformance.compile.pass.cpp @@ -17,4 +17,7 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); diff --git a/libcxx/test/std/containers/sequences/list/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/list/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/sequences/list/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/sequences/list/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/sequences/vector/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/sequences/vector/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/sequences/vector/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(std::indirectly_writable::reverse_iterator, int>); + static_assert(std::indirectly_readable::const_reverse_iterator>); +static_assert(!std::indirectly_writable::const_reverse_iterator, int>); diff --git a/libcxx/test/std/containers/unord/unord.map/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.map/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/unord/unord.map/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.map/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,17 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, + std::unordered_map::iterator::value_type>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, + std::unordered_map::const_iterator::value_type>); + static_assert(std::indirectly_readable::local_iterator>); +static_assert(!std::indirectly_writable::local_iterator, + std::unordered_map::local_iterator::value_type>); + static_assert(std::indirectly_readable::const_local_iterator>); +static_assert(!std::indirectly_writable::const_local_iterator, + std::unordered_map::const_local_iterator::value_type>); diff --git a/libcxx/test/std/containers/unord/unord.multimap/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/unord/unord.multimap/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multimap/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,17 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, + std::unordered_multimap::iterator::value_type>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, + std::unordered_multimap::const_iterator::value_type>); + static_assert(std::indirectly_readable::local_iterator>); +static_assert(!std::indirectly_writable::local_iterator, + std::unordered_multimap::local_iterator::value_type>); + static_assert(std::indirectly_readable::const_local_iterator>); +static_assert(!std::indirectly_writable::const_local_iterator, + std::unordered_multimap::const_local_iterator::value_type>); diff --git a/libcxx/test/std/containers/unord/unord.multiset/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/unord/unord.multiset/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::local_iterator>); +static_assert(!std::indirectly_writable::local_iterator, int>); + static_assert(std::indirectly_readable::const_local_iterator>); +static_assert(!std::indirectly_writable::const_local_iterator, int>); diff --git a/libcxx/test/std/containers/unord/unord.set/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/unord/unord.set/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/unord/unord.set/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.set/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(!std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::const_iterator>); +static_assert(!std::indirectly_writable::const_iterator, int>); + static_assert(std::indirectly_readable::local_iterator>); +static_assert(!std::indirectly_writable::local_iterator, int>); + static_assert(std::indirectly_readable::const_local_iterator>); +static_assert(!std::indirectly_writable::const_local_iterator, int>); diff --git a/libcxx/test/std/containers/views/span.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/span.iterators/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/views/span.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/views/span.iterators/iterator_concept_conformance.compile.pass.cpp @@ -17,4 +17,7 @@ #include static_assert(std::indirectly_readable::iterator>); +static_assert(std::indirectly_writable::iterator, int>); + static_assert(std::indirectly_readable::reverse_iterator>); +static_assert(std::indirectly_writable::reverse_iterator, int>); diff --git a/libcxx/test/std/input.output/filesystems/class.directory_iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/input.output/filesystems/class.directory_iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.directory_iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.directory_iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,4 +17,8 @@ #include static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert( + !std::indirectly_writable); diff --git a/libcxx/test/std/iterators/iterator.requirements/iterator.concepts/iterator.concept.writable/indirectly_writable.compile.pass.cpp b/libcxx/test/std/iterators/iterator.requirements/iterator.concepts/iterator.concept.writable/indirectly_writable.compile.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/iterators/iterator.requirements/iterator.concepts/iterator.concept.writable/indirectly_writable.compile.pass.cpp @@ -0,0 +1,66 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11, c++14, c++17 +// UNSUPPORTED: libcpp-no-concepts +// UNSUPPORTED: gcc-10 + +// template +// concept indirectly_writable; + +#include + +#include +#include +#include + +#include "read_write.h" + +template +[[nodiscard]] constexpr bool check_indirectly_writable() { + constexpr bool result = std::indirectly_writable; + static_assert(std::indirectly_writable == result); + return result; +} + +static_assert(check_indirectly_writable()); +static_assert(check_indirectly_writable()); +static_assert(!check_indirectly_writable()); + +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); + +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); + +namespace standard_types { +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(check_indirectly_writable()); +static_assert(!check_indirectly_writable()); + +static_assert(check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(check_indirectly_writable()); +static_assert(!check_indirectly_writable()); +static_assert(check_indirectly_writable()); +static_assert(check_indirectly_writable()); +static_assert(!check_indirectly_writable()); + +// +static_assert(check_indirectly_writable, int>()); +static_assert(!check_indirectly_writable, int>()); +static_assert(check_indirectly_writable, int>()); +static_assert(!check_indirectly_writable, int>()); + +// +static_assert(!check_indirectly_writable, int>()); +} // namespace standard_types diff --git a/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,3 +17,4 @@ #include static_assert(!std::indirectly_readable > >); +static_assert(std::indirectly_writable >, int>); diff --git a/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,3 +17,4 @@ #include static_assert(!std::indirectly_readable > >); +static_assert(std::indirectly_writable >, int>); diff --git a/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,3 +17,4 @@ #include static_assert(!std::indirectly_readable > >); +static_assert(std::indirectly_writable >, int>); diff --git a/libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/iterator_concept_conformance.compile.pass.cpp @@ -15,3 +15,4 @@ #include static_assert(std::indirectly_readable >); +static_assert(!std::indirectly_writable, int>); diff --git a/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,3 +17,4 @@ #include static_assert(std::indirectly_readable >); +static_assert(!std::indirectly_writable, int>); diff --git a/libcxx/test/std/iterators/stream.iterators/istreambuf.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/stream.iterators/istreambuf.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/stream.iterators/istreambuf.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/istreambuf.iterator/iterator_concept_conformance.compile.pass.cpp @@ -18,3 +18,4 @@ #include static_assert(std::indirectly_readable >); +static_assert(!std::indirectly_writable, char>); diff --git a/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp @@ -17,3 +17,4 @@ #include static_assert(!std::indirectly_readable >); +static_assert(std::indirectly_writable, int>); diff --git a/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp @@ -18,3 +18,4 @@ #include static_assert(!std::indirectly_readable >); +static_assert(std::indirectly_writable, char>); diff --git a/libcxx/test/std/re/re.iter/re.regiter/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/re/re.iter/re.regiter/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/re/re.iter/re.regiter/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/re/re.iter/re.regiter/iterator_concept_conformance.compile.pass.cpp @@ -16,7 +16,6 @@ #include -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); +using iterator = std::regex_iterator; +static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); diff --git a/libcxx/test/std/re/re.iter/re.tokiter/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/re/re.iter/re.tokiter/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/re/re.iter/re.tokiter/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/re/re.iter/re.tokiter/iterator_concept_conformance.compile.pass.cpp @@ -16,7 +16,6 @@ #include -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); -static_assert(std::indirectly_readable >); +using iterator = std::regex_token_iterator; +static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); diff --git a/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable); +static_assert(std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); diff --git a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp @@ -17,6 +17,13 @@ #include static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); + static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable);