Skip to content

Commit 20e274b

Browse files
Implement LWG-4398: enable_nonlocking_formatter_optimization should be disabled for container adaptors (#5883)
1 parent 1248f54 commit 20e274b

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

stl/inc/queue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ struct uses_allocator<queue<_Ty, _Container>, _Alloc> : uses_allocator<_Containe
230230
template <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container>
231231
struct formatter<queue<_Ty, _Container>, _CharT>
232232
: _Adaptor_formatter_base<queue<_Ty, _Container>, _CharT, _RANGES ref_view> {};
233+
234+
template <class _Ty, class _Container>
235+
constexpr bool enable_nonlocking_formatter_optimization<queue<_Ty, _Container>> = false;
233236
#endif // _HAS_CXX23
234237

235238
_EXPORT_STD template <class _Ty, class _Container = vector<_Ty>, class _Pr = less<typename _Container::value_type>>
@@ -505,6 +508,9 @@ struct uses_allocator<priority_queue<_Ty, _Container, _Pr>, _Alloc> : uses_alloc
505508
template <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container, class _Comp>
506509
struct formatter<priority_queue<_Ty, _Container, _Comp>, _CharT>
507510
: _Adaptor_formatter_base<priority_queue<_Ty, _Container, _Comp>, _CharT, _RANGES ref_view> {};
511+
512+
template <class _Ty, class _Container, class _Compare>
513+
constexpr bool enable_nonlocking_formatter_optimization<priority_queue<_Ty, _Container, _Compare>> = false;
508514
#endif // _HAS_CXX23
509515
_STD_END
510516

stl/inc/stack

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ struct uses_allocator<stack<_Ty, _Container>, _Alloc> : uses_allocator<_Containe
217217
template <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container>
218218
struct formatter<stack<_Ty, _Container>, _CharT>
219219
: _Adaptor_formatter_base<stack<_Ty, _Container>, _CharT, _RANGES ref_view> {};
220+
221+
template <class _Ty, class _Container>
222+
constexpr bool enable_nonlocking_formatter_optimization<stack<_Ty, _Container>> = false;
220223
#endif // _HAS_CXX23
221224
_STD_END
222225

tests/std/tests/P3107R5_enabled_specializations/test.compile.pass.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33

44
#include <chrono>
55
#include <cstddef>
6+
#include <deque>
67
#include <format>
8+
#include <functional>
79
#include <list>
10+
#include <queue>
811
#include <ranges>
12+
#include <stack>
913
#include <stacktrace>
1014
#include <string>
1115
#include <string_view>
@@ -142,6 +146,18 @@ static_assert(!enable_nonlocking_formatter_optimization<vector<unoptimized, myal
142146
using R = decltype(vector<int>{} | views::take(3));
143147
static_assert(!enable_nonlocking_formatter_optimization<R>);
144148

149+
// <queue> =====================================================================
150+
static_assert(!enable_nonlocking_formatter_optimization<queue<int>>);
151+
static_assert(!enable_nonlocking_formatter_optimization<queue<int, list<int>>>);
152+
static_assert(!enable_nonlocking_formatter_optimization<priority_queue<int>>);
153+
static_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, deque<int>>>);
154+
static_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, vector<int>, greater<int>>>);
155+
static_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, deque<int>, greater<>>>);
156+
157+
// <stack> =====================================================================
158+
static_assert(!enable_nonlocking_formatter_optimization<stack<int>>);
159+
static_assert(!enable_nonlocking_formatter_optimization<stack<int, vector<int>>>);
160+
145161
// <stacktrace> ================================================================
146162
static_assert(enable_nonlocking_formatter_optimization<stacktrace_entry>);
147163
static_assert(enable_nonlocking_formatter_optimization<stacktrace>);

0 commit comments

Comments
 (0)