#if __glibcxx_containers_ranges // C++ >= 23
template<ranges::input_range _Rg,
- typename _Alloc = allocator<ranges::range_value_t<_Rg>>>
+ __allocator_like _Alloc = allocator<ranges::range_value_t<_Rg>>>
deque(from_range_t, _Rg&&, _Alloc = _Alloc())
-> deque<ranges::range_value_t<_Rg>, _Alloc>;
#endif
#if __glibcxx_containers_ranges // C++ >= 23
template<ranges::input_range _Rg,
- typename _Alloc = allocator<ranges::range_value_t<_Rg>>>
+ __allocator_like _Alloc = allocator<ranges::range_value_t<_Rg>>>
vector(from_range_t, _Rg&&, _Alloc = _Alloc())
-> vector<ranges::range_value_t<_Rg>, _Alloc>;
#endif
#if __glibcxx_containers_ranges // C++ >= 23
template<ranges::input_range _Rg,
- typename _Alloc = allocator<ranges::range_value_t<_Rg>>>
+ __allocator_like _Alloc = allocator<ranges::range_value_t<_Rg>>>
deque(from_range_t, _Rg&&, _Alloc = _Alloc())
-> deque<ranges::range_value_t<_Rg>, _Alloc>;
#endif
#if __glibcxx_containers_ranges // C++ >= 23
template<ranges::input_range _Rg,
- typename _Alloc = allocator<ranges::range_value_t<_Rg>>>
+ __allocator_like _Alloc = allocator<ranges::range_value_t<_Rg>>>
vector(from_range_t, _Rg&&, _Alloc = _Alloc())
-> vector<ranges::range_value_t<_Rg>, _Alloc>;
#endif
--- /dev/null
+// { dg-do compile { target c++23 } }
+
+#include <deque>
+#include <testsuite_iterators.h>
+
+using Range = __gnu_test::test_input_range<int>;
+
+template<typename Alloc>
+concept can_deduce_deque = requires(Range r, Alloc a) {
+ std::deque(std::from_range, r, a);
+};
+
+// Deduction should fail because int does not qualify as an allocator.
+static_assert( ! can_deduce_deque<int> );
--- /dev/null
+// { dg-do compile { target c++23 } }
+
+#include <vector>
+#include <testsuite_iterators.h>
+
+using Range = __gnu_test::test_input_range<int>;
+
+template<typename Alloc>
+concept can_deduce_vector = requires(Range r, Alloc a) {
+ std::vector(std::from_range, r, a);
+};
+
+// Deduction should fail because int does not qualify as an allocator.
+static_assert( ! can_deduce_vector<int> );