[libcxx-commits] [PATCH] D95983: [libc++] Essentially revert D94807, to avoid calling __unwrap_iter in constexpr contexts.

Arthur O'Dwyer via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Feb 3 15:35:05 PST 2021


Quuxplusone created this revision.
Quuxplusone added reviewers: rnk, ldionne, mclow.lists, EricWF.
Quuxplusone added a project: libc++.
Herald added a subscriber: mgrang.
Quuxplusone requested review of this revision.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++.

The user might write a contiguous iterator where `std::to_address(it)` is not constant-evaluable. Add regression tests for this.

See the new comments in <algorithm>:

  +// Furthermore, we can't do this for user-defined iterators because their
  +// `to_address` may be non-constexpr and/or have observable side effects.
  +// Furthermore, some algorithms (e.g. std::copy, but not std::sort) need
  +// to convert the "unwrapped" pointer back into an iterator, for which there
  +// is no standard API: we rely on implicit conversion to do the right thing.
  +// For user-defined iterators this isn't a conforming assumption.
  +// So the only type we actually unwrap is our own __wrap_iter<T*>.

This is horrible, in that it rolls back the "support for user-defined contiguous iterators" I promised in D94807 <https://reviews.llvm.org/D94807>. However, at this point I don't see how to make that work at all. :(


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D95983

Files:
  libcxx/include/algorithm
  libcxx/test/std/algorithms/alg.modifying.operations/alg.move/contiguous_nonconstexpr.pass.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95983.321247.patch
Type: text/x-patch
Size: 7173 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210203/9c0f0879/attachment.bin>


More information about the libcxx-commits mailing list