[libcxx-commits] [PATCH] D118736: [libc++] Guard std::ranges under _LIBCPP_HAS_NO_INCOMPLETE_RANGES.

Arthur O'Dwyer via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Thu Feb 10 13:28:23 PST 2022


Quuxplusone updated this revision to Diff 407661.
Quuxplusone edited the summary of this revision.
Quuxplusone added a comment.

Here's the new idea:

- Omit everything in `ranges::` to start with.
- Then, permit everything in `namespace std`, including `swappable`, `iterator_t`, `sentinel_t`, `counted_iterator`, `default_sentinel_t`.
- Then, permit everything transitively required by those: `swap_ranges`, `iter_swap`, `input_range`, `iter_move`, `in_in_result`, `borrowed_range`, `begin`, `end`, etc etc.

I believe we still achieve the goal of not permitting anything with struct-layout concerns.

Notice that we permit `std::counted_iterator` but not `views::counted` (because the former is in `std::` and the latter isn't).
Notice that we permit `ranges::in_in_result` but not `ranges::in_out_result` (because the former is transitively needed by `swappable` and the latter is not needed by anyone).
Notice that we permit `span` and `string_view`'s ctors taking (iter,sentinel), but not their ctors taking (range). This is double good, because string_view's range ctor is probably going to go away again before C++23 ships.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118736/new/

https://reviews.llvm.org/D118736

Files:
  libcxx/include/__algorithm/in_in_out_result.h
  libcxx/include/__algorithm/in_out_result.h
  libcxx/include/__filesystem/directory_iterator.h
  libcxx/include/__filesystem/recursive_directory_iterator.h
  libcxx/include/__functional/ranges_operations.h
  libcxx/include/__iterator/advance.h
  libcxx/include/__iterator/distance.h
  libcxx/include/__iterator/insert_iterator.h
  libcxx/include/__iterator/iter_move.h
  libcxx/include/__iterator/iter_swap.h
  libcxx/include/__iterator/next.h
  libcxx/include/__iterator/prev.h
  libcxx/include/__memory/concepts.h
  libcxx/include/__memory/ranges_construct_at.h
  libcxx/include/__memory/ranges_uninitialized_algorithms.h
  libcxx/include/__ranges/all.h
  libcxx/include/__ranges/common_view.h
  libcxx/include/__ranges/concepts.h
  libcxx/include/__ranges/copyable_box.h
  libcxx/include/__ranges/counted.h
  libcxx/include/__ranges/dangling.h
  libcxx/include/__ranges/data.h
  libcxx/include/__ranges/drop_view.h
  libcxx/include/__ranges/empty.h
  libcxx/include/__ranges/empty_view.h
  libcxx/include/__ranges/enable_borrowed_range.h
  libcxx/include/__ranges/enable_view.h
  libcxx/include/__ranges/iota_view.h
  libcxx/include/__ranges/join_view.h
  libcxx/include/__ranges/non_propagating_cache.h
  libcxx/include/__ranges/owning_view.h
  libcxx/include/__ranges/range_adaptor.h
  libcxx/include/__ranges/ref_view.h
  libcxx/include/__ranges/reverse_view.h
  libcxx/include/__ranges/single_view.h
  libcxx/include/__ranges/size.h
  libcxx/include/__ranges/subrange.h
  libcxx/include/__ranges/take_view.h
  libcxx/include/__ranges/transform_view.h
  libcxx/include/__ranges/view_interface.h
  libcxx/include/span
  libcxx/include/string_view
  libcxx/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_forward_iterator.compile.pass.cpp
  libcxx/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_input_iterator.compile.pass.cpp
  libcxx/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_sentinel_for.compile.pass.cpp
  libcxx/test/libcxx/ranges/has-no-incomplete-ranges.compile.pass.cpp
  libcxx/test/libcxx/ranges/range.access/end.incomplete_type.pass.cpp
  libcxx/test/libcxx/ranges/range.utility.helpers/different_from.compile.pass.cpp
  libcxx/test/libcxx/ranges/range.utility.helpers/has_arrow.compile.pass.cpp
  libcxx/test/std/algorithms/algorithms.results/in_in_result.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/constraints.verify.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_count.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_count_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.distance/iterator_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.distance/lwg3664.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/constraints.compile.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_count.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_count_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.prev/constraints.compile.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.prev/iterator.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.prev/iterator_count.pass.cpp
  libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.prev/iterator_count_sentinel.pass.cpp
  libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.nodiscard.verify.cpp
  libcxx/test/std/iterators/predef.iterators/counted.iterator/compare.pass.cpp
  libcxx/test/std/iterators/predef.iterators/iterators.common/assign.pass.cpp
  libcxx/test/std/ranges/range.access/begin.pass.cpp
  libcxx/test/std/ranges/range.access/end.pass.cpp
  libcxx/test/std/ranges/range.req/range.range/borrowed_range.compile.pass.cpp
  libcxx/test/std/ranges/range.req/range.range/borrowed_range.subsumption.compile.pass.cpp
  libcxx/test/std/ranges/range.req/range.range/enable_borrowed_range.compile.pass.cpp
  libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp
  libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/equal_to.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/greater.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/greater_equal.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/less.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/less_equal.pass.cpp
  libcxx/test/std/utilities/function.objects/range.cmp/not_equal_to.pass.cpp
  libcxx/test/support/test_iterators.h
  libcxx/test/support/test_macros.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118736.407661.patch
Type: text/x-patch
Size: 55796 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220210/ccc2af6e/attachment-0001.bin>


More information about the libcxx-commits mailing list