summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-05-31 22:07:49 +0000
committerEric Fiselier <eric@efcs.ca>2017-05-31 22:07:49 +0000
commit018a3d51a47f7275c59e802709104498b729522b (patch)
tree0b1dd3dc5ebbdfa46c3eedcb185115521941e154 /include
parent256425754dd739443c3f2913f482655c1425e1a3 (diff)
[Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows
Summary: This patch improves how libc++ handles min/max macros within the headers. Previously libc++ would undef them and emit a warning. This patch changes libc++ to use `#pragma push_macro` to save the macro before undefining it, and `#pragma pop_macro` to restore the macros and the end of the header. Reviewers: mclow.lists, bcraig, compnerd, EricWF Reviewed By: EricWF Subscribers: cfe-commits, krytarowski Differential Revision: https://reviews.llvm.org/D33080 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304357 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/__bit_reference8
-rw-r--r--include/__config30
-rw-r--r--include/__hash_table10
-rw-r--r--include/__mutex_base8
-rw-r--r--include/__split_buffer9
-rw-r--r--include/__std_stream8
-rw-r--r--include/__string8
-rw-r--r--include/__threading_support7
-rw-r--r--include/__tree8
-rw-r--r--include/__undef_macros (renamed from include/__undef_min_max)7
-rw-r--r--include/algorithm8
-rw-r--r--include/array2
-rw-r--r--include/bitset14
-rw-r--r--include/chrono8
-rw-r--r--include/deque14
-rw-r--r--include/experimental/algorithm9
-rw-r--r--include/experimental/dynarray5
-rw-r--r--include/experimental/functional9
-rw-r--r--include/experimental/memory_resource5
-rw-r--r--include/experimental/numeric6
-rw-r--r--include/experimental/optional28
-rw-r--r--include/experimental/string_view5
-rw-r--r--include/forward_list9
-rw-r--r--include/fstream8
-rw-r--r--include/istream8
-rw-r--r--include/limits17
-rw-r--r--include/list8
-rw-r--r--include/locale16
-rw-r--r--include/memory8
-rw-r--r--include/module.modulemap2
-rw-r--r--include/mutex8
-rw-r--r--include/numeric5
-rw-r--r--include/optional7
-rw-r--r--include/random8
-rw-r--r--include/ratio8
-rw-r--r--include/regex8
-rw-r--r--include/shared_mutex8
-rw-r--r--include/sstream8
-rw-r--r--include/streambuf5
-rw-r--r--include/string8
-rw-r--r--include/string_view7
-rw-r--r--include/thread5
-rw-r--r--include/valarray8
-rw-r--r--include/vector8
44 files changed, 298 insertions, 95 deletions
diff --git a/include/__bit_reference b/include/__bit_reference
index 9aea96145..3e4a21d26 100644
--- a/include/__bit_reference
+++ b/include/__bit_reference
@@ -14,12 +14,14 @@
#include <__config>
#include <algorithm>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Cp, bool _IsConst, typename _Cp::__storage_type = 0> class __bit_iterator;
@@ -1273,4 +1275,6 @@ private:
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___BIT_REFERENCE
diff --git a/include/__config b/include/__config
index 32e542bd1..ec007907c 100644
--- a/include/__config
+++ b/include/__config
@@ -1205,4 +1205,34 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
#define _LIBCPP_AVAILABILITY_NO_STREAMS_EXTERN_TEMPLATE
#endif
+#if defined(_LIBCPP_COMPILER_IBM)
+#define _LIBCPP_HAS_NO_PRAGMA_PUSH_POP_MACRO
+#endif
+
+#if defined(_LIBCPP_HAS_NO_PRAGMA_PUSH_POP_MACRO)
+# define _LIBCPP_PUSH_MACROS
+# define _LIBCPP_POP_MACROS
+#else
+ // Don't warn about macro conflicts when we can restore them at the
+ // end of the header.
+# ifndef _LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS
+# define _LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS
+# endif
+# if defined(_LIBCPP_COMPILER_MSVC)
+# define _LIBCPP_PUSH_MACROS \
+ __pragma(push_macro("min")) \
+ __pragma(push_macro("max"))
+# define _LIBCPP_POP_MACROS \
+ __pragma(pop_macro("min")) \
+ __pragma(pop_macro("max"))
+# else
+# define _LIBCPP_PUSH_MACROS \
+ _Pragma("push_macro(\"min\")") \
+ _Pragma("push_macro(\"max\")")
+# define _LIBCPP_POP_MACROS \
+ _Pragma("pop_macro(\"min\")") \
+ _Pragma("pop_macro(\"max\")")
+# endif
+#endif // defined(_LIBCPP_HAS_NO_PRAGMA_PUSH_POP_MACRO)
+
#endif // _LIBCPP_CONFIG
diff --git a/include/__hash_table b/include/__hash_table
index acdc443a6..79336ff79 100644
--- a/include/__hash_table
+++ b/include/__hash_table
@@ -20,16 +20,17 @@
#include <utility>
#include <type_traits>
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_CXX03_LANG
template <class _Key, class _Tp>
@@ -2667,6 +2668,9 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__subscriptable(const const_iterator*,
}
#endif // _LIBCPP_DEBUG_LEVEL >= 2
+
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP__HASH_TABLE
diff --git a/include/__mutex_base b/include/__mutex_base
index 7f5e2ea28..159acd626 100644
--- a/include/__mutex_base
+++ b/include/__mutex_base
@@ -15,12 +15,16 @@
#include <chrono>
#include <system_error>
#include <__threading_support>
-#include <__undef_min_max>
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_HAS_NO_THREADS
@@ -428,4 +432,6 @@ condition_variable::wait_for(unique_lock<mutex>& __lk,
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___MUTEX_BASE
diff --git a/include/__split_buffer b/include/__split_buffer
index 72073f024..1daa4e5ad 100644
--- a/include/__split_buffer
+++ b/include/__split_buffer
@@ -6,12 +6,14 @@
#include <type_traits>
#include <algorithm>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <bool>
@@ -628,7 +630,8 @@ swap(__split_buffer<_Tp, _Allocator>& __x, __split_buffer<_Tp, _Allocator>& __y)
__x.swap(__y);
}
-
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_SPLIT_BUFFER
diff --git a/include/__std_stream b/include/__std_stream
index fb5a346f1..db90795f6 100644
--- a/include/__std_stream
+++ b/include/__std_stream
@@ -17,12 +17,14 @@
#include <__locale>
#include <cstdio>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
static const int __limit = 8;
@@ -355,4 +357,6 @@ __stdoutbuf<_CharT>::imbue(const locale& __loc)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___STD_STREAM
diff --git a/include/__string b/include/__string
index 75608cea7..d30c7fddc 100644
--- a/include/__string
+++ b/include/__string
@@ -57,14 +57,16 @@ template <> struct char_traits<wchar_t>;
#include <cstdio> // For EOF.
#include <memory> // for __murmur2_or_cityhash
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// char_traits
@@ -870,4 +872,6 @@ struct __quoted_output_proxy
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___STRING
diff --git a/include/__threading_support b/include/__threading_support
index afd7cb506..5d4c90796 100644
--- a/include/__threading_support
+++ b/include/__threading_support
@@ -30,9 +30,12 @@
#include <windows.h>
#include <process.h>
#include <fibersapi.h>
-#include <__undef_min_max>
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
#if defined(_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL) || \
defined(_LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL)
#define _LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_FUNC_VIS
@@ -629,6 +632,8 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // !_LIBCPP_HAS_NO_THREADS
#endif // _LIBCPP_THREADING_SUPPORT
diff --git a/include/__tree b/include/__tree
index 6771589bb..792870aa6 100644
--- a/include/__tree
+++ b/include/__tree
@@ -17,12 +17,14 @@
#include <stdexcept>
#include <algorithm>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp, class _Compare, class _Allocator> class __tree;
@@ -2685,4 +2687,6 @@ swap(__tree<_Tp, _Compare, _Allocator>& __x,
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___TREE
diff --git a/include/__undef_min_max b/include/__undef_macros
index 71db3965e..60ab1dbfb 100644
--- a/include/__undef_min_max
+++ b/include/__undef_macros
@@ -1,13 +1,14 @@
// -*- C++ -*-
-//===----------------------------------------------------------------------===//
+//===------------------------ __undef_macros ------------------------------===//
//
// The LLVM Compiler Infrastructure
//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
+
#ifdef min
#if !defined(_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS)
#if defined(_LIBCPP_WARNING)
diff --git a/include/algorithm b/include/algorithm
index 71440508e..9fe0361e5 100644
--- a/include/algorithm
+++ b/include/algorithm
@@ -651,14 +651,16 @@ template <class BidirectionalIterator, class Compare>
#include <intrin.h>
#endif
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// I'd like to replace these with _VSTD::equal_to<void>, but can't because:
@@ -5904,4 +5906,6 @@ prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_ALGORITHM
diff --git a/include/array b/include/array
index 31f5501b9..79f7e0d62 100644
--- a/include/array
+++ b/include/array
@@ -113,6 +113,8 @@ template <size_t I, class T, size_t N> const T&& get(const array<T, N>&&) noexce
#pragma GCC system_header
#endif
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp, size_t _Size>
diff --git a/include/bitset b/include/bitset
index b49c93ce2..583122fbf 100644
--- a/include/bitset
+++ b/include/bitset
@@ -113,10 +113,6 @@ template <size_t N> struct hash<std::bitset<N>>;
*/
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
#include <__config>
#include <__bit_reference>
#include <cstddef>
@@ -126,7 +122,13 @@ template <size_t N> struct hash<std::bitset<N>>;
#include <iosfwd>
#include <__functional_base>
-#include <__undef_min_max>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -1090,4 +1092,6 @@ operator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x);
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_BITSET
diff --git a/include/chrono b/include/chrono
index 657808736..4b793c760 100644
--- a/include/chrono
+++ b/include/chrono
@@ -305,12 +305,14 @@ constexpr chrono::duration<unspecified , nano> operator "" ns(long doub
#include <ratio>
#include <limits>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
namespace chrono
@@ -1160,4 +1162,6 @@ namespace chrono { // hoist the literals into namespace std::chrono
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_CHRONO
diff --git a/include/deque b/include/deque
index bd4316412..f795b489e 100644
--- a/include/deque
+++ b/include/deque
@@ -150,10 +150,6 @@ template <class T, class Allocator>
*/
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
#include <__config>
#include <__split_buffer>
#include <type_traits>
@@ -162,7 +158,13 @@ template <class T, class Allocator>
#include <algorithm>
#include <stdexcept>
-#include <__undef_min_max>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -2900,4 +2902,6 @@ swap(deque<_Tp, _Allocator>& __x, deque<_Tp, _Allocator>& __y)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_DEQUE
diff --git a/include/experimental/algorithm b/include/experimental/algorithm
index b32d7ca66..3801cae4f 100644
--- a/include/experimental/algorithm
+++ b/include/experimental/algorithm
@@ -39,17 +39,18 @@ SampleIterator sample(PopulationIterator first, PopulationIterator last,
#include <algorithm>
#include <type_traits>
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_LFTS
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+_LIBCPP_BEGIN_NAMESPACE_LFTS
+
template <class _ForwardIterator, class _Searcher>
_LIBCPP_INLINE_VISIBILITY
_ForwardIterator search(_ForwardIterator __f, _ForwardIterator __l, const _Searcher &__s)
@@ -67,4 +68,6 @@ _SampleIterator sample(_PopulationIterator __first, _PopulationIterator __last,
_LIBCPP_END_NAMESPACE_LFTS
+_LIBCPP_POP_MACROS
+
#endif /* _LIBCPP_EXPERIMENTAL_ALGORITHM */
diff --git a/include/experimental/dynarray b/include/experimental/dynarray
index f96a0e5fe..16193317a 100644
--- a/include/experimental/dynarray
+++ b/include/experimental/dynarray
@@ -107,6 +107,9 @@ public:
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
namespace std { namespace experimental { inline namespace __array_extensions_v1 {
template <class _Tp>
@@ -295,5 +298,7 @@ template <class _Tp, class _Alloc>
struct _LIBCPP_TEMPLATE_VIS uses_allocator<std::experimental::dynarray<_Tp>, _Alloc> : true_type {};
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // if _LIBCPP_STD_VER > 11
#endif // _LIBCPP_DYNARRAY
diff --git a/include/experimental/functional b/include/experimental/functional
index 75fc8e99f..a136cbb57 100644
--- a/include/experimental/functional
+++ b/include/experimental/functional
@@ -89,21 +89,22 @@ inline namespace fundamentals_v1 {
#include <experimental/__config>
#include <functional>
-
#include <algorithm>
#include <type_traits>
#include <vector>
#include <array>
#include <unordered_map>
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_LFTS
#if _LIBCPP_STD_VER > 11
@@ -456,4 +457,6 @@ make_boyer_moore_horspool_searcher( _RandomAccessIterator __f, _RandomAccessIter
_LIBCPP_END_NAMESPACE_LFTS
+_LIBCPP_POP_MACROS
+
#endif /* _LIBCPP_EXPERIMENTAL_FUNCTIONAL */
diff --git a/include/experimental/memory_resource b/include/experimental/memory_resource
index 743f9cbe6..d101f3e08 100644
--- a/include/experimental/memory_resource
+++ b/include/experimental/memory_resource
@@ -82,6 +82,9 @@ namespace pmr {
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_LFTS_PMR
// Round __s up to next multiple of __a.
@@ -419,4 +422,6 @@ using resource_adaptor = __resource_adaptor_imp<
_LIBCPP_END_NAMESPACE_LFTS_PMR
+_LIBCPP_POP_MACROS
+
#endif /* _LIBCPP_EXPERIMENTAL_MEMORY_RESOURCE */
diff --git a/include/experimental/numeric b/include/experimental/numeric
index 6488a68ec..d784c08f0 100644
--- a/include/experimental/numeric
+++ b/include/experimental/numeric
@@ -41,6 +41,9 @@ inline namespace fundamentals_v2 {
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
#if _LIBCPP_STD_VER > 11
_LIBCPP_BEGIN_NAMESPACE_LFTS_V2
@@ -110,4 +113,7 @@ lcm(_Tp __m, _Up __n)
_LIBCPP_END_NAMESPACE_LFTS_V2
#endif /* _LIBCPP_STD_VER > 11 */
+
+_LIBCPP_POP_MACROS
+
#endif /* _LIBCPP_EXPERIMENTAL_NUMERIC */
diff --git a/include/experimental/optional b/include/experimental/optional
index 48adfbae5..b251748fb 100644
--- a/include/experimental/optional
+++ b/include/experimental/optional
@@ -143,6 +143,21 @@ namespace std { namespace experimental { inline namespace fundamentals_v1 {
#include <experimental/__config>
#include <functional>
#include <stdexcept>
+#if _LIBCPP_STD_VER > 11
+#include <initializer_list>
+#include <type_traits>
+#include <new>
+#include <__functional_base>
+#include <__debug>
+#endif
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
class _LIBCPP_EXCEPTION_ABI _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS bad_optional_access
@@ -160,17 +175,6 @@ _LIBCPP_END_NAMESPACE_EXPERIMENTAL
#if _LIBCPP_STD_VER > 11
-#include <initializer_list>
-#include <type_traits>
-#include <new>
-#include <__functional_base>
-#include <__undef_min_max>
-#include <__debug>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
_LIBCPP_BEGIN_NAMESPACE_LFTS
struct in_place_t {};
@@ -913,4 +917,6 @@ _LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_STD_VER > 11
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_EXPERIMENTAL_OPTIONAL
diff --git a/include/experimental/string_view b/include/experimental/string_view
index 41c0d34d3..da104f9a1 100644
--- a/include/experimental/string_view
+++ b/include/experimental/string_view
@@ -189,6 +189,9 @@ namespace std {
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_LFTS
template<class _CharT, class _Traits = _VSTD::char_traits<_CharT> >
@@ -810,4 +813,6 @@ quoted ( std::experimental::basic_string_view <_CharT, _Traits> __sv,
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_LFTS_STRING_VIEW
diff --git a/include/forward_list b/include/forward_list
index e4ab41e38..8bfa9a084 100644
--- a/include/forward_list
+++ b/include/forward_list
@@ -167,19 +167,20 @@ template <class T, class Allocator>
*/
#include <__config>
-
#include <initializer_list>
#include <memory>
#include <limits>
#include <iterator>
#include <algorithm>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp, class _VoidPtr> struct __forward_list_node;
@@ -1719,4 +1720,6 @@ swap(forward_list<_Tp, _Alloc>& __x, forward_list<_Tp, _Alloc>& __y)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_FORWARD_LIST
diff --git a/include/fstream b/include/fstream
index 5ec42bd13..e41a53af4 100644
--- a/include/fstream
+++ b/include/fstream
@@ -171,12 +171,14 @@ typedef basic_fstream<wchar_t> wfstream;
#include <__locale>
#include <cstdio>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _CharT, class _Traits>
@@ -1476,4 +1478,6 @@ basic_fstream<_CharT, _Traits>::close()
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_FSTREAM
diff --git a/include/istream b/include/istream
index 530f204cf..0b8e05d95 100644
--- a/include/istream
+++ b/include/istream
@@ -162,12 +162,14 @@ template <class charT, class traits, class T>
#include <__config>
#include <ostream>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _CharT, class _Traits>
@@ -1683,4 +1685,6 @@ _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_iostream<ch
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_ISTREAM
diff --git a/include/limits b/include/limits
index 4755c57cf..675cfc45d 100644
--- a/include/limits
+++ b/include/limits
@@ -102,15 +102,8 @@ template<> class numeric_limits<cv long double>;
*/
#include <__config>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
#include <type_traits>
-#include <__undef_min_max>
-
#if defined(_LIBCPP_COMPILER_MSVC)
#include "support/win32/limits_msvc_win32.h"
#endif // _LIBCPP_MSVCRT
@@ -119,6 +112,14 @@ template<> class numeric_limits<cv long double>;
#include "support/ibm/limits.h"
#endif // __IBMCPP__
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
enum float_round_style
@@ -811,4 +812,6 @@ template <class _Tp>
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_LIMITS
diff --git a/include/list b/include/list
index 5e76d1103..20a66c360 100644
--- a/include/list
+++ b/include/list
@@ -177,14 +177,16 @@ template <class T, class Alloc>
#include <algorithm>
#include <type_traits>
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp, class _VoidPtr> struct __list_node;
@@ -2415,4 +2417,6 @@ swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_LIST
diff --git a/include/locale b/include/locale
index d29a2dc70..bdedbeae2 100644
--- a/include/locale
+++ b/include/locale
@@ -208,18 +208,20 @@ template <class charT> class messages_byname;
#include <Availability.h>
#endif
-#include <__undef_min_max>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
#include <__bsd_locale_defaults.h>
#else
#include <__bsd_locale_fallbacks.h>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
#if defined(__APPLE__) || defined(__FreeBSD__)
@@ -4274,4 +4276,6 @@ wbuffer_convert<_Codecvt, _Elem, _Tr>::__close()
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_LOCALE
diff --git a/include/memory b/include/memory
index 31dc73d8b..b12b46ab4 100644
--- a/include/memory
+++ b/include/memory
@@ -658,12 +658,14 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
# include <atomic>
#endif
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _ValueType>
@@ -5574,4 +5576,6 @@ struct __temp_value {
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_MEMORY
diff --git a/include/module.modulemap b/include/module.modulemap
index 98b1870af..3194b5c9f 100644
--- a/include/module.modulemap
+++ b/include/module.modulemap
@@ -484,7 +484,7 @@ module std [system] {
module __string { header "__string" export * }
module __tree { header "__tree" export * }
module __tuple { header "__tuple" export * }
- module __undef_min_max { header "__undef_min_max" export * }
+ module __undef_macros { header "__undef_macros" export * }
module experimental {
requires cplusplus11
diff --git a/include/mutex b/include/mutex
index 0b25614e8..553808820 100644
--- a/include/mutex
+++ b/include/mutex
@@ -196,12 +196,14 @@ template<class Callable, class ...Args>
#endif
#include <__threading_support>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_HAS_NO_THREADS
@@ -696,4 +698,6 @@ call_once(once_flag& __flag, const _Callable& __func)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_MUTEX
diff --git a/include/numeric b/include/numeric
index 9c98cdbe2..0e53ba33c 100644
--- a/include/numeric
+++ b/include/numeric
@@ -71,6 +71,9 @@ template <class M, class N>
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Tp>
@@ -267,4 +270,6 @@ lcm(_Tp __m, _Up __n)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_NUMERIC
diff --git a/include/optional b/include/optional
index 70b6eb44d..8c8ee76b1 100644
--- a/include/optional
+++ b/include/optional
@@ -146,7 +146,6 @@ namespace std {
#include <__config>
#include <__debug>
#include <__functional_base>
-#include <__undef_min_max>
#include <functional>
#include <initializer_list>
#include <new>
@@ -158,6 +157,10 @@ namespace std {
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
namespace std // purposefully not using versioning namespace
{
@@ -1315,4 +1318,6 @@ _LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_STD_VER > 14
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_OPTIONAL
diff --git a/include/random b/include/random
index c6dfb664c..ba8a088df 100644
--- a/include/random
+++ b/include/random
@@ -1646,12 +1646,14 @@ class piecewise_linear_distribution
#include <istream>
#include <ostream>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// __is_seed_sequence
@@ -6736,4 +6738,6 @@ operator>>(basic_istream<_CharT, _Traits>& __is,
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_RANDOM
diff --git a/include/ratio b/include/ratio
index fa893637d..27aa0ded3 100644
--- a/include/ratio
+++ b/include/ratio
@@ -83,12 +83,14 @@ typedef ratio<1000000000000000000000000, 1> yotta; // not supported
#include <climits>
#include <type_traits>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// __static_gcd
@@ -520,4 +522,6 @@ template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_greater_equal_v
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_RATIO
diff --git a/include/regex b/include/regex
index 0f49b95a6..443c2e303 100644
--- a/include/regex
+++ b/include/regex
@@ -765,12 +765,14 @@ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
#include <vector>
#include <deque>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
namespace regex_constants
@@ -6562,4 +6564,6 @@ regex_replace(const _CharT* __s,
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_REGEX
diff --git a/include/shared_mutex b/include/shared_mutex
index ff36ee6ac..9cb81528c 100644
--- a/include/shared_mutex
+++ b/include/shared_mutex
@@ -125,12 +125,14 @@ template <class Mutex>
#include <__config>
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
#if _LIBCPP_STD_VER > 11 || defined(_LIBCPP_BUILDING_SHARED_MUTEX)
#include <__mutex_base>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
@@ -500,4 +502,6 @@ _LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_STD_VER > 11
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_SHARED_MUTEX
diff --git a/include/sstream b/include/sstream
index 411374207..b9903f961 100644
--- a/include/sstream
+++ b/include/sstream
@@ -175,12 +175,14 @@ typedef basic_stringstream<wchar_t> wstringstream;
#include <istream>
#include <string>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// basic_stringbuf
@@ -970,4 +972,6 @@ basic_stringstream<_CharT, _Traits, _Allocator>::str(const string_type& __s)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_SSTREAM
diff --git a/include/streambuf b/include/streambuf
index 12eded5c4..a10ce1bf5 100644
--- a/include/streambuf
+++ b/include/streambuf
@@ -116,6 +116,9 @@ protected:
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _CharT, class _Traits>
@@ -486,4 +489,6 @@ _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_STEAMBUF
diff --git a/include/string b/include/string
index af028a023..91df914e4 100644
--- a/include/string
+++ b/include/string
@@ -484,14 +484,16 @@ basic_string<char32_t> operator "" s( const char32_t *str, size_t len ); // C++1
#include <cstdint>
#endif
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
// fpos
@@ -4041,4 +4043,6 @@ _LIBCPP_EXTERN_TEMPLATE(string operator+<char, char_traits<char>, allocator<char
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_STRING
diff --git a/include/string_view b/include/string_view
index e59f099f1..75374d2cb 100644
--- a/include/string_view
+++ b/include/string_view
@@ -166,7 +166,6 @@ namespace std {
*/
#include <__config>
-
#include <__string>
#include <algorithm>
#include <iterator>
@@ -178,6 +177,10 @@ namespace std {
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template<class _CharT, class _Traits = char_traits<_CharT> >
@@ -784,4 +787,6 @@ inline namespace literals
#endif
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_STRING_VIEW
diff --git a/include/thread b/include/thread
index 360b43d5e..1b8dca394 100644
--- a/include/thread
+++ b/include/thread
@@ -105,6 +105,9 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
#define __STDCPP_THREADS__ __cplusplus
#ifdef _LIBCPP_HAS_NO_THREADS
@@ -476,4 +479,6 @@ _LIBCPP_END_NAMESPACE_STD
#endif // !_LIBCPP_HAS_NO_THREADS
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_THREAD
diff --git a/include/valarray b/include/valarray
index f8e19acdb..ee61238a9 100644
--- a/include/valarray
+++ b/include/valarray
@@ -347,12 +347,14 @@ template <class T> unspecified2 end(const valarray<T>& v);
#include <functional>
#include <new>
-#include <__undef_min_max>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template<class _Tp> class _LIBCPP_TEMPLATE_VIS valarray;
@@ -4865,4 +4867,6 @@ end(const valarray<_Tp>& __v)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_VALARRAY
diff --git a/include/vector b/include/vector
index 6759dbd8a..ee19fb708 100644
--- a/include/vector
+++ b/include/vector
@@ -275,14 +275,16 @@ void swap(vector<T,Allocator>& x, vector<T,Allocator>& y)
#include <__split_buffer>
#include <__functional_base>
-#include <__undef_min_max>
-
#include <__debug>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+
_LIBCPP_BEGIN_NAMESPACE_STD
template <bool>
@@ -3357,4 +3359,6 @@ swap(vector<_Tp, _Allocator>& __x, vector<_Tp, _Allocator>& __y)
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP_VECTOR