![]() Instead of overloading `__to_address`, let's specialize `pointer_traits`. Function overloads need to be in scope at the point where they're called, whereas template specializations do not. (User code can provide pointer_traits specializations to be used by already-included library code, so obviously `__wrap_iter` can do the same.) `pointer_traits<__wrap_iter<It>>` cannot provide `pointer_to`, because you generally cannot create a `__wrap_iter` without also knowing the identity of the container into which you're trying to create an iterator. I believe this is OK; contiguous iterators are required to provide `to_address` but *not* necessarily `pointer_to`. Differential Revision: https://reviews.llvm.org/D110198 |
||
---|---|---|
.. | ||
allocator.tag | ||
allocator.traits | ||
allocator.uses | ||
c.malloc | ||
default.allocator | ||
pointer.conversion | ||
pointer.traits | ||
ptr.align | ||
specialized.algorithms | ||
storage.iterator | ||
temporary.buffer | ||
unique.ptr | ||
util.dynamic.safety | ||
util.smartptr |