When the allocators use fancy pointers, the internal map of `deque` stores `FancyPtr<T>` objects, and the previous strategy accessed these objects via `const FancyPtr<const T>` lvalues, which usually caused core language undefined behavior. Now `const_iterator` stores `FancyPtr<const FancyPtr<T>>` instead of `FancyPtr<const FancyPtr<const T>>`, and ABI break can happen when such two types have incompatible layouts. This is necessary for reducing undefined behavior and `constexpr` support for `deque` in C++26, and I currently don't want to provide any way to opt-out of that behavior. For `iterator`, the current strategy makes it store `FancyPtr<FancyPtr<T>>`. But it would make more sense to also store `FancyPtr<const FancyPtr<T>>` because we never modify the map via `iterator`. For some pathological combinations of allocators and fancy pointers, the rebinding trick doesn't work. These cases are rejected by `static_assert`. The existing test coverage seems to be sufficient.
libc++ Documentation ==================== The libc++ documentation is written using the Sphinx documentation generator. It is currently tested with Sphinx 1.1.3. To build the documents into html configure libc++ with the following cmake options: * -DLLVM_ENABLE_SPHINX=ON * -DLIBCXX_INCLUDE_DOCS=ON After configuring libc++ with these options the make rule `docs-libcxx-html` should be available. The documentation in this directory is published at https://libcxx.llvm.org. It is kept up-to-date by a build bot: https://lab.llvm.org/buildbot/#/builders/publish-sphinx-docs. If you notice that the documentation is not updating anymore, please contact one of the maintainers.