P1518 does the following in C++23 but we'll just do it in C++17 as well:
- Stop requiring Alloc to be an allocator on some container-adaptor deduction guides
- Stop deducing from Allocator on some sequence container constructors
- Stop deducing from Allocator on some other container constructors (libc++ already did this)
The affected constructors are the "allocator-extended" versions of constructors where the non-allocator arguments are already sufficient to deduce the allocator type. For example,
std::pmr::vector<int> v1; std::vector v2(v1, std::pmr::new_delete_resource()); std::stack s2(v1, std::pmr::new_delete_resource());
P1518R2 (which will be in the next mailing) was adopted, or at least resolved-to-be-adopted, by LWG the other day.
I'm proposing that libc++ implement these CTAD improvements not only in C++2b mode, but also in all modes (i.e. C++17 and C++20). Anyone who doesn't notice won't mind, and anyone who does notice will thank us. Plus, libc++ already implements a little more than half of P1518R2 in all modes. This patch is just getting us all the way there.