[libc++] [P1518R2] Better CTAD behavior for containers with allocators.
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());
Differential Revision: https://reviews.llvm.org/D97742
NOKEYCHECK=True
GitOrigin-RevId: dd15c2723cd29574c341ec189409a6c83fbefb04
diff --git a/include/stack b/include/stack
index a45b979..c1b2cbe 100644
--- a/include/stack
+++ b/include/stack
@@ -239,7 +239,7 @@
template<class _Container,
class _Alloc,
class = _EnableIf<!__is_allocator<_Container>::value>,
- class = _EnableIf<__is_allocator<_Alloc>::value>
+ class = _EnableIf<uses_allocator<_Container, _Alloc>::value>
>
stack(_Container, _Alloc)
-> stack<typename _Container::value_type, _Container>;