[libcxx-commits] [libcxx] [libc++] Enable missing allocator constructors in C++11 (PR #204845)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jun 19 12:52:50 PDT 2026
https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/204845
>From c7bb1403282a0c0d89b1bae0cccdadecf9c70345 Mon Sep 17 00:00:00 2001
From: halbi2 <hehiralbi at gmail.com>
Date: Fri, 19 Jun 2026 10:55:49 -0400
Subject: [PATCH 1/9] [libc++] Add missing constructor for forward_list
Fixes #204843
---
libcxx/include/forward_list | 6 +-----
.../sequences/forwardlist/forwardlist.cons/size.pass.cpp | 2 +-
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list
index 6d86f7a8e5975..d963fea6084ca 100644
--- a/libcxx/include/forward_list
+++ b/libcxx/include/forward_list
@@ -37,7 +37,7 @@ public:
noexcept(is_nothrow_default_constructible<allocator_type>::value);
explicit forward_list(const allocator_type& a);
explicit forward_list(size_type n);
- explicit forward_list(size_type n, const allocator_type& a); // C++14
+ explicit forward_list(size_type n, const allocator_type& a);
forward_list(size_type n, const value_type& v);
forward_list(size_type n, const value_type& v, const allocator_type& a);
template <class InputIterator>
@@ -664,9 +664,7 @@ public:
_NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) {} // = default;
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(const allocator_type& __a);
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n);
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit forward_list(size_type __n, const allocator_type& __a);
-# endif
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI forward_list(size_type __n, const value_type& __v);
template <__enable_if_t<__is_allocator_v<_Alloc>, int> = 0>
@@ -941,7 +939,6 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type
}
}
-# if _LIBCPP_STD_VER >= 14
template <class _Tp, class _Alloc>
_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type __n, const allocator_type& __base_alloc)
: __base(__base_alloc) {
@@ -952,7 +949,6 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type
}
}
}
-# endif
template <class _Tp, class _Alloc>
_LIBCPP_CONSTEXPR_SINCE_CXX26 forward_list<_Tp, _Alloc>::forward_list(size_type __n, const value_type& __v) {
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
index 206854560c19f..2cfd829a1eb23 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
@@ -21,7 +21,7 @@
template <class T, class Allocator>
void check_allocator(unsigned n, Allocator const& alloc = Allocator()) {
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
typedef std::forward_list<T, Allocator> C;
C d(n, alloc);
assert(d.get_allocator() == alloc);
>From c16e921d91bf3e27ab50be188c3f63b97d42864f Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 12:43:05 -0400
Subject: [PATCH 2/9] [libc++] Apply LWG 2210 as a DR for all containers
---
libcxx/include/__vector/vector.h | 2 -
libcxx/include/__vector/vector_bool.h | 4 --
libcxx/include/deque | 6 +--
libcxx/include/list | 6 +--
libcxx/include/map | 16 ++------
libcxx/include/set | 16 ++------
libcxx/include/unordered_map | 36 ++++++++---------
libcxx/include/unordered_set | 36 ++++++-----------
libcxx/include/vector | 4 +-
.../map.cons/iter_iter_comp_alloc.pass.cpp | 2 +-
.../iter_iter_comp_alloc.pass.cpp | 40 +++++++++++++++++++
.../multiset.cons/iter_iter_alloc.pass.cpp | 2 +-
.../set/set.cons/iter_iter_alloc.pass.cpp | 2 +-
.../sequences/deque/deque.cons/size.pass.cpp | 7 ++--
.../list/list.cons/size_type.pass.cpp | 7 ++--
.../vector.bool/construct_size.pass.cpp | 3 +-
.../vector.cons/construct_size.pass.cpp | 2 +-
.../init_size_allocator.pass.cpp | 2 +-
.../init_size_hash_allocator.pass.cpp | 2 +-
.../iter_iter_size_allocator.pass.cpp | 2 +-
.../iter_iter_size_hash_allocator.pass.cpp | 2 +-
.../unord.map.cnstr/size_allocator.pass.cpp | 2 +-
.../size_hash_allocator.pass.cpp | 2 +-
.../init_size_allocator.pass.cpp | 2 +-
.../init_size_hash_allocator.pass.cpp | 2 +-
.../iter_iter_size_allocator.pass.cpp | 2 +-
.../iter_iter_size_hash_allocator.pass.cpp | 2 +-
.../size_allocator.pass.cpp | 2 +-
.../size_hash_allocator.pass.cpp | 2 +-
.../init_size_allocator.pass.cpp | 2 +-
.../init_size_hash_allocator.pass.cpp | 2 +-
.../iter_iter_size_allocator.pass.cpp | 2 +-
.../iter_iter_size_hash_allocator.pass.cpp | 2 +-
.../size_allocator.pass.cpp | 2 +-
.../size_hash_allocator.pass.cpp | 2 +-
.../init_size_allocator.pass.cpp | 2 +-
.../init_size_hash_allocator.pass.cpp | 2 +-
.../iter_iter_size_allocator.pass.cpp | 2 +-
.../iter_iter_size_hash_allocator.pass.cpp | 2 +-
.../unord.set.cnstr/size_allocator.pass.cpp | 2 +-
.../size_hash_allocator.pass.cpp | 2 +-
41 files changed, 120 insertions(+), 119 deletions(-)
diff --git a/libcxx/include/__vector/vector.h b/libcxx/include/__vector/vector.h
index 2a081e3cdb1e2..e9b8c4090419c 100644
--- a/libcxx/include/__vector/vector.h
+++ b/libcxx/include/__vector/vector.h
@@ -149,7 +149,6 @@ class vector {
__guard.__complete();
}
-#if _LIBCPP_STD_VER >= 14
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI explicit vector(size_type __n, const allocator_type& __a)
: __alloc_(__a) {
auto __guard = std::__make_exception_guard(__destroy_vector(*this));
@@ -159,7 +158,6 @@ class vector {
}
__guard.__complete();
}
-#endif
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI vector(size_type __n, const value_type& __x) {
auto __guard = std::__make_exception_guard(__destroy_vector(*this));
diff --git a/libcxx/include/__vector/vector_bool.h b/libcxx/include/__vector/vector_bool.h
index f73e086478a70..6dc904e6d3bd9 100644
--- a/libcxx/include/__vector/vector_bool.h
+++ b/libcxx/include/__vector/vector_bool.h
@@ -152,9 +152,7 @@ class vector<bool, _Allocator> {
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 ~vector() { __destroy_vector (*this)(); }
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit vector(size_type __n);
-#if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit vector(size_type __n, const allocator_type& __a);
-#endif
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(size_type __n, const value_type& __v);
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
vector(size_type __n, const value_type& __v, const allocator_type& __a);
@@ -605,7 +603,6 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 vector<bool, _Allocator>::vector(size_type __n)
}
}
-#if _LIBCPP_STD_VER >= 14
template <class _Allocator>
_LIBCPP_CONSTEXPR_SINCE_CXX20 vector<bool, _Allocator>::vector(size_type __n, const allocator_type& __a)
: __begin_(nullptr), __size_(0), __cap_(0), __alloc_(static_cast<__storage_allocator>(__a)) {
@@ -615,7 +612,6 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 vector<bool, _Allocator>::vector(size_type __n, co
__size_ = __n;
}
}
-#endif
template <class _Allocator>
_LIBCPP_CONSTEXPR_SINCE_CXX20 vector<bool, _Allocator>::vector(size_type __n, const value_type& __x)
diff --git a/libcxx/include/deque b/libcxx/include/deque
index 7aee552c63d37..5a4de99c7f143 100644
--- a/libcxx/include/deque
+++ b/libcxx/include/deque
@@ -40,7 +40,7 @@ public:
deque() noexcept(is_nothrow_default_constructible<allocator_type>::value);
explicit deque(const allocator_type& a);
explicit deque(size_type n);
- explicit deque(size_type n, const allocator_type& a); // C++14
+ explicit deque(size_type n, const allocator_type& a);
deque(size_type n, const value_type& v);
deque(size_type n, const value_type& v, const allocator_type& a);
template <class InputIterator>
@@ -644,9 +644,7 @@ public:
}
explicit _LIBCPP_HIDE_FROM_ABI deque(size_type __n);
-# if _LIBCPP_STD_VER >= 14
explicit _LIBCPP_HIDE_FROM_ABI deque(size_type __n, const _Allocator& __a);
-# endif
_LIBCPP_HIDE_FROM_ABI deque(size_type __n, const value_type& __v);
template <__enable_if_t<__is_allocator_v<_Allocator>, int> = 0>
@@ -1323,7 +1321,6 @@ deque<_Tp, _Allocator>::deque(size_type __n) : __start_(0), __size_(0) {
__append(__n);
}
-# if _LIBCPP_STD_VER >= 14
template <class _Tp, class _Allocator>
deque<_Tp, _Allocator>::deque(size_type __n, const _Allocator& __a)
: __map_(__pointer_allocator(__a)), __start_(0), __size_(0), __alloc_(__a) {
@@ -1331,7 +1328,6 @@ deque<_Tp, _Allocator>::deque(size_type __n, const _Allocator& __a)
if (__n > 0)
__append(__n);
}
-# endif
template <class _Tp, class _Allocator>
deque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v) : __start_(0), __size_(0) {
diff --git a/libcxx/include/list b/libcxx/include/list
index 3223f25e1cfba..8747ebbbcbfaa 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -39,7 +39,7 @@ public:
noexcept(is_nothrow_default_constructible<allocator_type>::value);
explicit list(const allocator_type& a);
explicit list(size_type n);
- explicit list(size_type n, const allocator_type& a); // C++14
+ explicit list(size_type n, const allocator_type& a);
list(size_type n, const value_type& value);
list(size_type n, const value_type& value, const allocator_type& a);
template <class Iter>
@@ -708,9 +708,7 @@ public:
_NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value) {}
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit list(const allocator_type& __a) : __base(__a) {}
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit list(size_type __n);
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI explicit list(size_type __n, const allocator_type& __a);
-# endif
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI list(size_type __n, const value_type& __x);
template <__enable_if_t<__is_allocator_v<_Alloc>, int> = 0>
_LIBCPP_CONSTEXPR_SINCE_CXX26 _LIBCPP_HIDE_FROM_ABI
@@ -1066,13 +1064,11 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 list<_Tp, _Alloc>::list(size_type __n) {
# endif
}
-# if _LIBCPP_STD_VER >= 14
template <class _Tp, class _Alloc>
_LIBCPP_CONSTEXPR_SINCE_CXX26 list<_Tp, _Alloc>::list(size_type __n, const allocator_type& __a) : __base(__a) {
for (; __n > 0; --__n)
emplace_back();
}
-# endif
template <class _Tp, class _Alloc>
_LIBCPP_CONSTEXPR_SINCE_CXX26 list<_Tp, _Alloc>::list(size_type __n, const value_type& __x) {
diff --git a/libcxx/include/map b/libcxx/include/map
index de0a475ee572f..0afa72662aa32 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -84,12 +84,12 @@ public:
constexpr map(initializer_list<value_type> il, const key_compare& comp, const allocator_type& a);
template <class InputIterator>
constexpr map(InputIterator first, InputIterator last, const allocator_type& a)
- : map(first, last, Compare(), a) {} // C++14
+ : map(first, last, Compare(), a) {}
template<container-compatible-range<value_type> R>
constexpr map(from_range_t, R&& rg, const Allocator& a))
: map(from_range, std::forward<R>(rg), Compare(), a) { } // C++23
constexpr map(initializer_list<value_type> il, const allocator_type& a)
- : map(il, Compare(), a) {} // C++14
+ : map(il, Compare(), a) {}
constexpr ~map();
constexpr map& operator=(const map& m);
@@ -368,12 +368,12 @@ public:
const allocator_type& a);
template <class InputIterator>
multimap(InputIterator first, InputIterator last, const allocator_type& a)
- : multimap(first, last, Compare(), a) {} // C++14
+ : multimap(first, last, Compare(), a) {}
template<container-compatible-range<value_type> R>
multimap(from_range_t, R&& rg, const Allocator& a))
: multimap(from_range, std::forward<R>(rg), Compare(), a) { } // C++23
multimap(initializer_list<value_type> il, const allocator_type& a)
- : multimap(il, Compare(), a) {} // C++14
+ : multimap(il, Compare(), a) {}
~multimap();
multimap& operator=(const multimap& m);
@@ -1035,12 +1035,10 @@ public:
}
# endif
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI
_LIBCPP_CONSTEXPR_SINCE_CXX26 map(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
: map(__f, __l, key_compare(), __a) {}
-# endif
# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
@@ -1073,10 +1071,8 @@ public:
insert(__il.begin(), __il.end());
}
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 map(initializer_list<value_type> __il, const allocator_type& __a)
: map(__il, key_compare(), __a) {}
-# endif
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 map& operator=(initializer_list<value_type> __il) {
clear();
@@ -1817,12 +1813,10 @@ public:
}
# endif
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI
_LIBCPP_CONSTEXPR_SINCE_CXX26 multimap(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
: multimap(__f, __l, key_compare(), __a) {}
-# endif
# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
@@ -1856,11 +1850,9 @@ public:
insert(__il.begin(), __il.end());
}
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI
_LIBCPP_CONSTEXPR_SINCE_CXX26 multimap(initializer_list<value_type> __il, const allocator_type& __a)
: multimap(__il, key_compare(), __a) {}
-# endif
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 multimap& operator=(initializer_list<value_type> __il) {
clear();
diff --git a/libcxx/include/set b/libcxx/include/set
index 3f2d2cd164d2d..2b7755b057977 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -71,12 +71,12 @@ public:
const allocator_type& a);
template <class InputIterator>
set(InputIterator first, InputIterator last, const allocator_type& a)
- : set(first, last, Compare(), a) {} // C++14
+ : set(first, last, Compare(), a) {}
template<container-compatible-range<value_type> R>
set(from_range_t, R&& rg, const Allocator& a))
: set(from_range, std::forward<R>(rg), Compare(), a) { } // C++23
set(initializer_list<value_type> il, const allocator_type& a)
- : set(il, Compare(), a) {} // C++14
+ : set(il, Compare(), a) {}
~set();
set& operator=(const set& s);
@@ -316,12 +316,12 @@ public:
const allocator_type& a);
template <class InputIterator>
multiset(InputIterator first, InputIterator last, const allocator_type& a)
- : set(first, last, Compare(), a) {} // C++14
+ : set(first, last, Compare(), a) {}
template<container-compatible-range<value_type> R>
multiset(from_range_t, R&& rg, const Allocator& a))
: multiset(from_range, std::forward<R>(rg), Compare(), a) { } // C++23
multiset(initializer_list<value_type> il, const allocator_type& a)
- : set(il, Compare(), a) {} // C++14
+ : set(il, Compare(), a) {}
~multiset();
multiset& operator=(const multiset& s);
@@ -650,11 +650,9 @@ public:
}
# endif
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI set(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
: set(__f, __l, key_compare(), __a) {}
-# endif
# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
@@ -687,10 +685,8 @@ public:
insert(__il.begin(), __il.end());
}
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI set(initializer_list<value_type> __il, const allocator_type& __a)
: set(__il, key_compare(), __a) {}
-# endif
_LIBCPP_HIDE_FROM_ABI set& operator=(initializer_list<value_type> __il) {
clear();
@@ -1123,11 +1119,9 @@ public:
insert(__f, __l);
}
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI multiset(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
: multiset(__f, __l, key_compare(), __a) {}
-# endif
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI
@@ -1176,10 +1170,8 @@ public:
insert(__il.begin(), __il.end());
}
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI multiset(initializer_list<value_type> __il, const allocator_type& __a)
: multiset(__il, key_compare(), __a) {}
-# endif
_LIBCPP_HIDE_FROM_ABI multiset& operator=(initializer_list<value_type> __il) {
clear();
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index 8cefba01fb5f6..b8b160cd892d4 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -77,16 +77,16 @@ public:
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
unordered_map(size_type n, const allocator_type& a)
- : unordered_map(n, hasher(), key_equal(), a) {} // C++14
+ : unordered_map(n, hasher(), key_equal(), a) {}
unordered_map(size_type n, const hasher& hf, const allocator_type& a)
- : unordered_map(n, hf, key_equal(), a) {} // C++14
+ : unordered_map(n, hf, key_equal(), a) {}
template <class InputIterator>
unordered_map(InputIterator f, InputIterator l, size_type n, const allocator_type& a)
- : unordered_map(f, l, n, hasher(), key_equal(), a) {} // C++14
+ : unordered_map(f, l, n, hasher(), key_equal(), a) {}
template <class InputIterator>
unordered_map(InputIterator f, InputIterator l, size_type n, const hasher& hf,
const allocator_type& a)
- : unordered_map(f, l, n, hf, key_equal(), a) {} // C++14
+ : unordered_map(f, l, n, hf, key_equal(), a) {}
template<container-compatible-range<value_type> R>
unordered_map(from_range_t, R&& rg, size_type n, const allocator_type& a)
: unordered_map(from_range, std::forward<R>(rg), n, hasher(), key_equal(), a) { } // C++23
@@ -94,10 +94,10 @@ public:
unordered_map(from_range_t, R&& rg, size_type n, const hasher& hf, const allocator_type& a)
: unordered_map(from_range, std::forward<R>(rg), n, hf, key_equal(), a) { } // C++23
unordered_map(initializer_list<value_type> il, size_type n, const allocator_type& a)
- : unordered_map(il, n, hasher(), key_equal(), a) {} // C++14
+ : unordered_map(il, n, hasher(), key_equal(), a) {}
unordered_map(initializer_list<value_type> il, size_type n, const hasher& hf,
const allocator_type& a)
- : unordered_map(il, n, hf, key_equal(), a) {} // C++14
+ : unordered_map(il, n, hf, key_equal(), a) {}
~unordered_map();
unordered_map& operator=(const unordered_map&);
unordered_map& operator=(unordered_map&&)
@@ -363,16 +363,16 @@ public:
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
unordered_multimap(size_type n, const allocator_type& a)
- : unordered_multimap(n, hasher(), key_equal(), a) {} // C++14
+ : unordered_multimap(n, hasher(), key_equal(), a) {}
unordered_multimap(size_type n, const hasher& hf, const allocator_type& a)
- : unordered_multimap(n, hf, key_equal(), a) {} // C++14
+ : unordered_multimap(n, hf, key_equal(), a) {}
template <class InputIterator>
unordered_multimap(InputIterator f, InputIterator l, size_type n, const allocator_type& a)
- : unordered_multimap(f, l, n, hasher(), key_equal(), a) {} // C++14
+ : unordered_multimap(f, l, n, hasher(), key_equal(), a) {}
template <class InputIterator>
unordered_multimap(InputIterator f, InputIterator l, size_type n, const hasher& hf,
const allocator_type& a)
- : unordered_multimap(f, l, n, hf, key_equal(), a) {} // C++14
+ : unordered_multimap(f, l, n, hf, key_equal(), a) {}
template<container-compatible-range<value_type> R>
unordered_multimap(from_range_t, R&& rg, size_type n, const allocator_type& a)
: unordered_multimap(from_range, std::forward<R>(rg), n, hasher(), key_equal(), a) { } // C++23
@@ -380,10 +380,10 @@ public:
unordered_multimap(from_range_t, R&& rg, size_type n, const hasher& hf, const allocator_type& a)
: unordered_multimap(from_range, std::forward<R>(rg), n, hf, key_equal(), a) { } // C++23
unordered_multimap(initializer_list<value_type> il, size_type n, const allocator_type& a)
- : unordered_multimap(il, n, hasher(), key_equal(), a) {} // C++14
+ : unordered_multimap(il, n, hasher(), key_equal(), a) {}
unordered_multimap(initializer_list<value_type> il, size_type n, const hasher& hf,
const allocator_type& a)
- : unordered_multimap(il, n, hf, key_equal(), a) {} // C++14
+ : unordered_multimap(il, n, hf, key_equal(), a) {}
~unordered_multimap();
unordered_multimap& operator=(const unordered_multimap&);
unordered_multimap& operator=(unordered_multimap&&)
@@ -993,7 +993,6 @@ public:
const key_equal& __eql,
const allocator_type& __a);
# endif // _LIBCPP_CXX03_LANG
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI unordered_map(size_type __n, const allocator_type& __a)
: unordered_map(__n, hasher(), key_equal(), __a) {}
_LIBCPP_HIDE_FROM_ABI unordered_map(size_type __n, const hasher& __hf, const allocator_type& __a)
@@ -1007,7 +1006,7 @@ public:
_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_map(__first, __last, __n, __hf, key_equal(), __a) {}
-# if _LIBCPP_STD_VER >= 23
+# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
_LIBCPP_HIDE_FROM_ABI unordered_map(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
: unordered_map(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
@@ -1016,8 +1015,9 @@ public:
_LIBCPP_HIDE_FROM_ABI
unordered_map(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_map(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
-# endif
+# endif
+# ifndef _LIBCPP_CXX03_LANG
_LIBCPP_HIDE_FROM_ABI unordered_map(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
: unordered_map(__il, __n, hasher(), key_equal(), __a) {}
_LIBCPP_HIDE_FROM_ABI
@@ -1787,7 +1787,6 @@ public:
const key_equal& __eql,
const allocator_type& __a);
# endif // _LIBCPP_CXX03_LANG
-# if _LIBCPP_STD_VER >= 14
_LIBCPP_HIDE_FROM_ABI unordered_multimap(size_type __n, const allocator_type& __a)
: unordered_multimap(__n, hasher(), key_equal(), __a) {}
_LIBCPP_HIDE_FROM_ABI unordered_multimap(size_type __n, const hasher& __hf, const allocator_type& __a)
@@ -1801,7 +1800,7 @@ public:
_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) {}
-# if _LIBCPP_STD_VER >= 23
+# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
_LIBCPP_HIDE_FROM_ABI unordered_multimap(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
: unordered_multimap(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
@@ -1810,8 +1809,9 @@ public:
_LIBCPP_HIDE_FROM_ABI
unordered_multimap(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multimap(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
-# endif
+# endif
+# ifndef _LIBCPP_CXX03_LANG
_LIBCPP_HIDE_FROM_ABI unordered_multimap(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
: unordered_multimap(__il, __n, hasher(), key_equal(), __a) {}
_LIBCPP_HIDE_FROM_ABI
diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index d54d59403b038..10f8b730b842b 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -76,22 +76,22 @@ public:
unordered_set(initializer_list<value_type>, size_type n = 0,
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
- unordered_set(size_type n, const allocator_type& a); // C++14
- unordered_set(size_type n, const hasher& hf, const allocator_type& a); // C++14
+ unordered_set(size_type n, const allocator_type& a);
+ unordered_set(size_type n, const hasher& hf, const allocator_type& a);
template <class InputIterator>
- unordered_set(InputIterator f, InputIterator l, size_type n, const allocator_type& a); // C++14
+ unordered_set(InputIterator f, InputIterator l, size_type n, const allocator_type& a);
template <class InputIterator>
unordered_set(InputIterator f, InputIterator l, size_type n,
- const hasher& hf, const allocator_type& a); // C++14
+ const hasher& hf, const allocator_type& a);
template<container-compatible-range<value_type> R>
unordered_set(from_range_t, R&& rg, size_type n, const allocator_type& a)
: unordered_set(from_range, std::forward<R>(rg), n, hasher(), key_equal(), a) { } // C++23
template<container-compatible-range<value_type> R>
unordered_set(from_range_t, R&& rg, size_type n, const hasher& hf, const allocator_type& a)
: unordered_set(from_range, std::forward<R>(rg), n, hf, key_equal(), a) { } // C++23
- unordered_set(initializer_list<value_type> il, size_type n, const allocator_type& a); // C++14
+ unordered_set(initializer_list<value_type> il, size_type n, const allocator_type& a);
unordered_set(initializer_list<value_type> il, size_type n,
- const hasher& hf, const allocator_type& a); // C++14
+ const hasher& hf, const allocator_type& a);
~unordered_set();
unordered_set& operator=(const unordered_set&);
unordered_set& operator=(unordered_set&&)
@@ -324,22 +324,22 @@ public:
unordered_multiset(initializer_list<value_type>, size_type n = /see below/,
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
- unordered_multiset(size_type n, const allocator_type& a); // C++14
- unordered_multiset(size_type n, const hasher& hf, const allocator_type& a); // C++14
+ unordered_multiset(size_type n, const allocator_type& a);
+ unordered_multiset(size_type n, const hasher& hf, const allocator_type& a);
template <class InputIterator>
- unordered_multiset(InputIterator f, InputIterator l, size_type n, const allocator_type& a); // C++14
+ unordered_multiset(InputIterator f, InputIterator l, size_type n, const allocator_type& a);
template <class InputIterator>
unordered_multiset(InputIterator f, InputIterator l, size_type n,
- const hasher& hf, const allocator_type& a); // C++14
+ const hasher& hf, const allocator_type& a);
template<container-compatible-range<value_type> R>
unordered_multiset(from_range_t, R&& rg, size_type n, const allocator_type& a)
: unordered_multiset(from_range, std::forward<R>(rg), n, hasher(), key_equal(), a) { } // C++23
template<container-compatible-range<value_type> R>
unordered_multiset(from_range_t, R&& rg, size_type n, const hasher& hf, const allocator_type& a)
: unordered_multiset(from_range, std::forward<R>(rg), n, hf, key_equal(), a) { } // C++23
- unordered_multiset(initializer_list<value_type> il, size_type n, const allocator_type& a); // C++14
+ unordered_multiset(initializer_list<value_type> il, size_type n, const allocator_type& a);
unordered_multiset(initializer_list<value_type> il, size_type n,
- const hasher& hf, const allocator_type& a); // C++14
+ const hasher& hf, const allocator_type& a);
~unordered_multiset();
unordered_multiset& operator=(const unordered_multiset&);
unordered_multiset& operator=(unordered_multiset&&)
@@ -634,12 +634,10 @@ public:
_LIBCPP_HIDE_FROM_ABI unordered_set() _NOEXCEPT_(is_nothrow_default_constructible<__table>::value) {}
explicit _LIBCPP_HIDE_FROM_ABI
unordered_set(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal());
-# if _LIBCPP_STD_VER >= 14
inline _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const allocator_type& __a)
: unordered_set(__n, hasher(), key_equal(), __a) {}
inline _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_set(__n, __hf, key_equal(), __a) {}
-# endif
_LIBCPP_HIDE_FROM_ABI
unordered_set(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a);
template <class _InputIterator>
@@ -677,7 +675,6 @@ public:
}
# endif
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
inline _LIBCPP_HIDE_FROM_ABI
unordered_set(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a)
@@ -686,7 +683,6 @@ public:
_LIBCPP_HIDE_FROM_ABI unordered_set(
_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_set(__first, __last, __n, __hf, key_equal(), __a) {}
-# endif
# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
@@ -717,14 +713,12 @@ public:
const hasher& __hf,
const key_equal& __eql,
const allocator_type& __a);
-# if _LIBCPP_STD_VER >= 14
inline _LIBCPP_HIDE_FROM_ABI
unordered_set(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
: unordered_set(__il, __n, hasher(), key_equal(), __a) {}
inline _LIBCPP_HIDE_FROM_ABI
unordered_set(initializer_list<value_type> __il, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_set(__il, __n, __hf, key_equal(), __a) {}
-# endif
# endif // _LIBCPP_CXX03_LANG
_LIBCPP_HIDE_FROM_ABI ~unordered_set() {
static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
@@ -1250,12 +1244,10 @@ public:
unordered_multiset(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal());
_LIBCPP_HIDE_FROM_ABI
unordered_multiset(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a);
-# if _LIBCPP_STD_VER >= 14
inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const allocator_type& __a)
: unordered_multiset(__n, hasher(), key_equal(), __a) {}
inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multiset(__n, __hf, key_equal(), __a) {}
-# endif
template <class _InputIterator>
_LIBCPP_HIDE_FROM_ABI unordered_multiset(_InputIterator __first, _InputIterator __last);
template <class _InputIterator>
@@ -1291,7 +1283,6 @@ public:
}
# endif
-# if _LIBCPP_STD_VER >= 14
template <class _InputIterator>
inline _LIBCPP_HIDE_FROM_ABI
unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a)
@@ -1300,7 +1291,6 @@ public:
inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(
_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) {}
-# endif
# if _LIBCPP_STD_VER >= 23
template <_ContainerCompatibleRange<value_type> _Range>
@@ -1331,14 +1321,12 @@ public:
const hasher& __hf,
const key_equal& __eql,
const allocator_type& __a);
-# if _LIBCPP_STD_VER >= 14
inline _LIBCPP_HIDE_FROM_ABI
unordered_multiset(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
: unordered_multiset(__il, __n, hasher(), key_equal(), __a) {}
inline _LIBCPP_HIDE_FROM_ABI
unordered_multiset(initializer_list<value_type> __il, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multiset(__il, __n, __hf, key_equal(), __a) {}
-# endif
# endif // _LIBCPP_CXX03_LANG
_LIBCPP_HIDE_FROM_ABI ~unordered_multiset() {
static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
diff --git a/libcxx/include/vector b/libcxx/include/vector
index f289013a682bc..b136cca1f6050 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -39,7 +39,7 @@ public:
noexcept(is_nothrow_default_constructible<allocator_type>::value);
explicit vector(const allocator_type&);
explicit vector(size_type n);
- explicit vector(size_type n, const allocator_type&); // C++14
+ explicit vector(size_type n, const allocator_type&);
vector(size_type n, const value_type& value, const allocator_type& = allocator_type());
template <class InputIterator>
vector(InputIterator first, InputIterator last, const allocator_type& = allocator_type());
@@ -171,7 +171,7 @@ public:
vector()
noexcept(is_nothrow_default_constructible<allocator_type>::value);
explicit vector(const allocator_type&) noexcept;
- explicit vector(size_type n, const allocator_type& a = allocator_type()); // C++14
+ explicit vector(size_type n, const allocator_type& a = allocator_type());
vector(size_type n, const value_type& value, const allocator_type& = allocator_type());
template <class InputIterator>
vector(InputIterator first, InputIterator last, const allocator_type& = allocator_type());
diff --git a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
index 014f9c5960e5b..859a24911bab2 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
@@ -72,7 +72,7 @@ TEST_CONSTEXPR_CXX26 bool test() {
assert(*std::next(m.begin()) == V(2, 1));
assert(*std::next(m.begin(), 2) == V(3, 1));
}
-# if TEST_STD_VER > 11
+# if TEST_STD_VER >= 11
{
typedef std::pair<const int, double> V;
V ar[] = {
diff --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
index fb3f4b831cc0d..08320024cc5bd 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
@@ -115,6 +115,46 @@ bool test() {
assert(*std::next(m.begin(), 7) == V(3, 1.5));
assert(*std::next(m.begin(), 8) == V(3, 2));
}
+ {
+ typedef std::pair<const int, double> V;
+ V ar[] = {
+ V(1, 1),
+ V(1, 1.5),
+ V(1, 2),
+ V(2, 1),
+ V(2, 1.5),
+ V(2, 2),
+ V(3, 1),
+ V(3, 1.5),
+ V(3, 2),
+ };
+ {
+ typedef min_allocator<V> A;
+ typedef test_less<int> C;
+ A a;
+ std::multimap<int, double, C, A> m(ar, ar + sizeof(ar) / sizeof(ar[0]), a);
+
+ assert(m.size() == 9);
+ assert(std::distance(m.begin(), m.end()) == 9);
+ assert(*m.begin() == V(1, 1));
+ assert(*std::next(m.begin(), 3) == V(2, 1));
+ assert(*std::next(m.begin(), 6) == V(3, 1));
+ assert(m.get_allocator() == a);
+ }
+ {
+ typedef explicit_allocator<V> A;
+ typedef test_less<int> C;
+ A a;
+ std::multimap<int, double, C, A> m(ar, ar + sizeof(ar) / sizeof(ar[0]), a);
+
+ assert(m.size() == 9);
+ assert(std::distance(m.begin(), m.end()) == 9);
+ assert(*m.begin() == V(1, 1));
+ assert(*std::next(m.begin(), 3) == V(2, 1));
+ assert(*std::next(m.begin(), 6) == V(3, 1));
+ assert(m.get_allocator() == a);
+ }
+ }
#endif
return true;
diff --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
index 50f8fda2a676b..c2636ff7ec7e6 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
@@ -48,7 +48,7 @@ int main(int, char**) {
assert(*std::next(m.begin(), 7) == 3);
assert(*std::next(m.begin(), 8) == 3);
}
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
{
typedef int V;
V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
diff --git a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
index 6a3146fcd2b0a..45cb62afa17e5 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
@@ -46,7 +46,7 @@ int main(int, char**) {
assert(*std::next(m.begin()) == 2);
assert(*std::next(m.begin(), 2) == 3);
}
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
{
typedef int V;
V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
diff --git a/libcxx/test/std/containers/sequences/deque/deque.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.cons/size.pass.cpp
index f8f42bd668f83..c31caa6c2d414 100644
--- a/libcxx/test/std/containers/sequences/deque/deque.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/deque/deque.cons/size.pass.cpp
@@ -9,6 +9,7 @@
// <deque>
// explicit deque(size_type n);
+// explicit deque(size_type n, const Allocator& a);
#include "asan_testing.h"
#include <deque>
@@ -22,7 +23,7 @@
template <class T, class Allocator>
void test2(unsigned n) {
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
typedef std::deque<T, Allocator> C;
typedef typename C::const_iterator const_iterator;
assert(DefaultOnly::count == 0);
@@ -62,7 +63,7 @@ void test1(unsigned n) {
template <class T, class Allocator>
void test3(unsigned n, Allocator const& alloc = Allocator()) {
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
typedef std::deque<T, Allocator> C;
{
C d(n, alloc);
@@ -102,7 +103,7 @@ int main(int, char**) {
test<DefaultOnly, min_allocator<DefaultOnly> >(4095);
#endif
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
test3<DefaultOnly, std::allocator<DefaultOnly>>(1023);
test3<int, std::allocator<int>>(1);
test3<int, min_allocator<int>>(3);
diff --git a/libcxx/test/std/containers/sequences/list/list.cons/size_type.pass.cpp b/libcxx/test/std/containers/sequences/list/list.cons/size_type.pass.cpp
index 55371e8354a9e..fed3d1caa4dda 100644
--- a/libcxx/test/std/containers/sequences/list/list.cons/size_type.pass.cpp
+++ b/libcxx/test/std/containers/sequences/list/list.cons/size_type.pass.cpp
@@ -8,7 +8,8 @@
// <list>
-// explicit list(size_type n); // constexpr since C++26
+// explicit list(size_type n); // constexpr since C++26
+// explicit list(size_type n, const Allocator& a); // constexpr since C++26
#include <list>
#include <cassert>
@@ -21,7 +22,7 @@
template <class T, class Allocator>
TEST_CONSTEXPR_CXX26 void test1(unsigned n, Allocator const& alloc = Allocator()) {
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
typedef std::list<T, Allocator> C;
{
C d(n, alloc);
@@ -59,7 +60,7 @@ TEST_CONSTEXPR_CXX26 bool test() {
++i;
assert(*i == 0);
}
-#if TEST_STD_VER > 11
+#if TEST_STD_VER >= 11
{
typedef std::list<int, min_allocator<int> > C;
C l(3, min_allocator<int>());
diff --git a/libcxx/test/std/containers/sequences/vector.bool/construct_size.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/construct_size.pass.cpp
index 80b3fe307c93a..f97396d67ae9d 100644
--- a/libcxx/test/std/containers/sequences/vector.bool/construct_size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector.bool/construct_size.pass.cpp
@@ -10,6 +10,7 @@
// vector<bool>
// explicit vector(size_type n);
+// explicit vector(size_type n, const Allocator& alloc = Allocator());
#include <vector>
#include <cassert>
@@ -21,7 +22,7 @@
template <class C>
TEST_CONSTEXPR_CXX20 void
test2(typename C::size_type n, typename C::allocator_type const& a = typename C::allocator_type()) {
-#if TEST_STD_VER >= 14
+#if TEST_STD_VER >= 11
C c(n, a);
LIBCPP_ASSERT(c.__invariants());
assert(c.size() == n);
diff --git a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_size.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_size.pass.cpp
index cbae3653d995f..0902a4070b7aa 100644
--- a/libcxx/test/std/containers/sequences/vector/vector.cons/construct_size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/vector.cons/construct_size.pass.cpp
@@ -38,7 +38,7 @@ test(typename C::size_type n, typename C::allocator_type const& a = typename C::
}
// Test with a custom allocator
-#if TEST_STD_VER >= 14
+#if TEST_STD_VER >= 11
{
C c(n, a);
LIBCPP_ASSERT(c.__invariants());
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp
index e29ecea327971..3fd4e7fcfa5f5 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp
index c2adf98c7eaca..31d4ce0adf437 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp
index 1039e1d92be79..bf1536dd0b44a 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp
index b6e06df9c8fe2..a5f9ddeb0d825 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp
index 450fb7b5e40d4..8e4d7ff8e1fbe 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp
index a9f73f3f45fe2..19bbb305fe10f 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp
index 7ec2dd2efb895..a8371367f7ead 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp
index eab5d60fbf6f4..ec566bb75a2f9 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp
index ad6ad9d1ad1ef..5e694b5d5ed3a 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp
index ee35b36cf7519..7592b10b792ec 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp
index d49be5518922a..70798e3920a7d 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp
index f26fae2a2a81d..42d75cfa28ba0 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_map>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_allocator.pass.cpp
index bb0cc2441bfb7..314e60381dfcc 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_allocator.pass.cpp
index 24b802f4fcca2..f962ddd8f0344 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_allocator.pass.cpp
index 994ec058fae94..6eb48201d116c 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_hash_allocator.pass.cpp
index 138af889d5978..44e572e10071f 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/iter_iter_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_allocator.pass.cpp
index e536644470122..ddf0a4d02b932 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_allocator.pass.cpp
index 6ea22dab1aac9..531215e0671e3 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_allocator.pass.cpp
index 7346a951b1976..90c6d9720e90c 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_allocator.pass.cpp
index 704fff0f51cca..306ec62c81d7b 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_allocator.pass.cpp
index 414485466d71e..bdd2d841283a6 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_hash_allocator.pass.cpp
index ba986eba5f71c..48d64a8860e23 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/iter_iter_size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_allocator.pass.cpp
index 99abd12745eca..6af94925a5a2b 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_allocator.pass.cpp
index e44854eb0a132..11c3e7bd2ee0c 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_allocator.pass.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11
+// UNSUPPORTED: c++03
// <unordered_set>
>From 6f65da7e4fcf49cdbdfb26e9de28f18512d0b780 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:00:01 -0400
Subject: [PATCH 3/9] [libc++] Remove redundant TEST_STD_VER guard
---
.../associative/map/map.cons/iter_iter_comp_alloc.pass.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
index 859a24911bab2..ce2b2ef185d90 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
@@ -72,7 +72,6 @@ TEST_CONSTEXPR_CXX26 bool test() {
assert(*std::next(m.begin()) == V(2, 1));
assert(*std::next(m.begin(), 2) == V(3, 1));
}
-# if TEST_STD_VER >= 11
{
typedef std::pair<const int, double> V;
V ar[] = {
@@ -113,7 +112,6 @@ TEST_CONSTEXPR_CXX26 bool test() {
assert(m.get_allocator() == a);
}
}
-# endif
#endif
return true;
}
>From 65c03f06b9bd22b01888624112b77ecdd1367578 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:05:45 -0400
Subject: [PATCH 4/9] Format
---
libcxx/include/map | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/include/map b/libcxx/include/map
index 0afa72662aa32..c4a5dd2f74d6d 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -1850,8 +1850,8 @@ public:
insert(__il.begin(), __il.end());
}
- _LIBCPP_HIDE_FROM_ABI
- _LIBCPP_CONSTEXPR_SINCE_CXX26 multimap(initializer_list<value_type> __il, const allocator_type& __a)
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26
+ multimap(initializer_list<value_type> __il, const allocator_type& __a)
: multimap(__il, key_compare(), __a) {}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 multimap& operator=(initializer_list<value_type> __il) {
>From 9637a5399748b17f8eabdd8f2370abc5ac9f8e40 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:41:48 -0400
Subject: [PATCH 5/9] Expand beyond C++11
---
.../forwardlist/forwardlist.cons/size.pass.cpp | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
index 2cfd829a1eb23..760b3a985678a 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
@@ -21,15 +21,10 @@
template <class T, class Allocator>
void check_allocator(unsigned n, Allocator const& alloc = Allocator()) {
-#if TEST_STD_VER >= 11
typedef std::forward_list<T, Allocator> C;
C d(n, alloc);
assert(d.get_allocator() == alloc);
assert(static_cast<std::size_t>(std::distance(d.begin(), d.end())) == n);
-#else
- ((void)n);
- ((void)alloc);
-#endif
}
int main(int, char**) {
@@ -54,20 +49,18 @@ int main(int, char**) {
}
assert(n == N);
}
-#if TEST_STD_VER >= 11
{
typedef DefaultOnly T;
- typedef std::forward_list<T, min_allocator<T>> C;
+ typedef std::forward_list<T, min_allocator<T> > C;
unsigned N = 10;
C c(N);
unsigned n = 0;
for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n)
assert(*i == T());
assert(n == N);
- check_allocator<T, min_allocator<T>>(0);
- check_allocator<T, min_allocator<T>>(3);
+ check_allocator<T, min_allocator<T> >(0);
+ check_allocator<T, min_allocator<T> >(3);
}
-#endif
return 0;
}
>From 2a476d5a8b8b86e8030eb4bc21f81dd1d492a536 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:42:28 -0400
Subject: [PATCH 6/9] Add XFAIL
---
.../sequences/forwardlist/forwardlist.cons/size.pass.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
index 760b3a985678a..ac6f6c768bc42 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
@@ -11,6 +11,8 @@
// explicit forward_list(size_type n); // constexpr since C++26
// explicit forward_list(size_type n, const Alloc& a); // constexpr since C++26
+// XFAIL: FROZEN-CXX03-HEADERS-FIXME
+
#include <forward_list>
#include <cassert>
#include <cstddef>
>From 3fdd1d2812806e122e537d8c82dd56df4c82ebea Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:47:32 -0400
Subject: [PATCH 7/9] Fix broken list ctor in C++03
---
libcxx/include/list | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libcxx/include/list b/libcxx/include/list
index 8747ebbbcbfaa..b4fb9191cd7f7 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -1067,7 +1067,11 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 list<_Tp, _Alloc>::list(size_type __n) {
template <class _Tp, class _Alloc>
_LIBCPP_CONSTEXPR_SINCE_CXX26 list<_Tp, _Alloc>::list(size_type __n, const allocator_type& __a) : __base(__a) {
for (; __n > 0; --__n)
+# ifndef _LIBCPP_CXX03_LANG
emplace_back();
+# else
+ push_back(value_type());
+# endif
}
template <class _Tp, class _Alloc>
>From a81a73f39da5a6abaabbd37a7133acc37184183c Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:51:13 -0400
Subject: [PATCH 8/9] Don't expand beyond C++11
---
.../forwardlist/forwardlist.cons/size.pass.cpp | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
index ac6f6c768bc42..623807b0e5a87 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
@@ -23,10 +23,15 @@
template <class T, class Allocator>
void check_allocator(unsigned n, Allocator const& alloc = Allocator()) {
+#if TEST_STD_VER >= 11
typedef std::forward_list<T, Allocator> C;
C d(n, alloc);
assert(d.get_allocator() == alloc);
assert(static_cast<std::size_t>(std::distance(d.begin(), d.end())) == n);
+#else
+ ((void)n);
+ ((void)alloc);
+#endif
}
int main(int, char**) {
@@ -51,18 +56,20 @@ int main(int, char**) {
}
assert(n == N);
}
+#if TEST_STD_VER >= 11
{
typedef DefaultOnly T;
- typedef std::forward_list<T, min_allocator<T> > C;
+ typedef std::forward_list<T, min_allocator<T>> C;
unsigned N = 10;
C c(N);
unsigned n = 0;
for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n)
assert(*i == T());
assert(n == N);
- check_allocator<T, min_allocator<T> >(0);
- check_allocator<T, min_allocator<T> >(3);
+ check_allocator<T, min_allocator<T>>(0);
+ check_allocator<T, min_allocator<T>>(3);
}
+#endif
return 0;
}
>From f0b7958855d116fb877c7e0e8853526ee42dcfa6 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Fri, 19 Jun 2026 15:52:36 -0400
Subject: [PATCH 9/9] Remove XFAIL for now
---
.../sequences/forwardlist/forwardlist.cons/size.pass.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
index 623807b0e5a87..2cfd829a1eb23 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/size.pass.cpp
@@ -11,8 +11,6 @@
// explicit forward_list(size_type n); // constexpr since C++26
// explicit forward_list(size_type n, const Alloc& a); // constexpr since C++26
-// XFAIL: FROZEN-CXX03-HEADERS-FIXME
-
#include <forward_list>
#include <cassert>
#include <cstddef>
More information about the libcxx-commits
mailing list