Fix compilation errors with Clang
authorJonathan Wakely <jwakely@redhat.com>
Tue, 29 Oct 2019 20:16:57 +0000 (20:16 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 29 Oct 2019 20:16:57 +0000 (20:16 +0000)
* include/bits/alloc_traits.h (__cpp_lib_constexpr_dynamic_alloc):
Define.
(allocator_traits::_S_construct, allocator_traits::_S_destroy)
(__alloc_on_copy, __alloc_on_move, __alloc_on_swap): Use
_GLIBCXX14_CONSTEXPR instead of constexpr.
* include/bits/stl_construct.h (_Destroy): Likewise.

From-SVN: r277588

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/alloc_traits.h
libstdc++-v3/include/bits/stl_construct.h
libstdc++-v3/include/ext/alloc_traits.h

index ad595aa7a6573361ffcb331a809615d85cb2edc5..e9908841420b90f5cb8c61a1e2ea073ec52ea270 100644 (file)
@@ -1,5 +1,12 @@
 2019-10-29  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/bits/alloc_traits.h (__cpp_lib_constexpr_dynamic_alloc):
+       Define.
+       (allocator_traits::_S_construct, allocator_traits::_S_destroy)
+       (__alloc_on_copy, __alloc_on_move, __alloc_on_swap): Use
+       _GLIBCXX14_CONSTEXPR instead of constexpr.
+       * include/bits/stl_construct.h (_Destroy): Likewise.
+
        * include/Makefile.am: Add new header.
        * include/Makefile.in: Regenerate.
        * include/bits/iterator_concepts.h: New header.
index 26d6d26ae48469144291604450ca3ee1dfa80aaa..55211ac1d7264bd9a93c28b4f3ebc358710aea79 100644 (file)
@@ -241,13 +241,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          = typename __construct_helper<_Tp, _Args...>::type;
 
       template<typename _Tp, typename... _Args>
-       static constexpr _Require<__has_construct<_Tp, _Args...>>
+       static _GLIBCXX14_CONSTEXPR _Require<__has_construct<_Tp, _Args...>>
        _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
        noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...)))
        { __a.construct(__p, std::forward<_Args>(__args)...); }
 
       template<typename _Tp, typename... _Args>
-       static constexpr
+       static _GLIBCXX14_CONSTEXPR
        _Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
                               is_constructible<_Tp, _Args...>>>
        _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
@@ -256,14 +256,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        { std::_Construct(__p, std::forward<_Args>(__args)...); }
 
       template<typename _Alloc2, typename _Tp>
-       static constexpr auto
+       static _GLIBCXX14_CONSTEXPR auto
        _S_destroy(_Alloc2& __a, _Tp* __p, int)
        noexcept(noexcept(__a.destroy(__p)))
        -> decltype(__a.destroy(__p))
        { __a.destroy(__p); }
 
       template<typename _Alloc2, typename _Tp>
-       static constexpr void
+       static _GLIBCXX14_CONSTEXPR void
        _S_destroy(_Alloc2&, _Tp* __p, ...)
        noexcept(noexcept(__p->~_Tp()))
        { std::_Destroy(__p); }
@@ -393,6 +393,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       { return _S_select(__rhs, 0); }
     };
 
+#if __cplusplus > 201703L
+# define __cpp_lib_constexpr_dynamic_alloc 201907L
+#endif
+
   /// Partial specialization for std::allocator.
   template<typename _Tp>
     struct allocator_traits<allocator<_Tp>>
@@ -562,7 +566,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    constexpr void
+    _GLIBCXX14_CONSTEXPR void
     __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;
@@ -594,7 +598,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    constexpr void
+    _GLIBCXX14_CONSTEXPR void
     __alloc_on_move(_Alloc& __one, _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;
@@ -621,7 +625,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    constexpr void
+    _GLIBCXX14_CONSTEXPR void
     __alloc_on_swap(_Alloc& __one, _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;
index a16196ffe748466d8ed9c9d4547e2ed336430d23..c714148e03752edb73a69f25c8cd131327b51c9e 100644 (file)
@@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    * Destroy the object pointed to by a pointer type.
    */
   template<typename _Tp>
-    _GLIBCXX_CONSTEXPR inline void
+    _GLIBCXX14_CONSTEXPR inline void
     _Destroy(_Tp* __pointer)
     {
 #if __cplusplus > 201703L
index 052d811ec01f510dce403225af35ca4f1893d945..c7b8e5d4ba30dc20da69b0fd451082e8a631393d 100644 (file)
@@ -76,7 +76,8 @@ template<typename _Alloc, typename = typename _Alloc::value_type>
   public:
     // overload construct for non-standard pointer types
     template<typename _Ptr, typename... _Args>
-      static constexpr std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
+      static _GLIBCXX14_CONSTEXPR
+      std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
       construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
       noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p),
                                              std::forward<_Args>(__args)...)))
@@ -87,7 +88,8 @@ template<typename _Alloc, typename = typename _Alloc::value_type>
 
     // overload destroy for non-standard pointer types
     template<typename _Ptr>
-      static constexpr std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
+      static _GLIBCXX14_CONSTEXPR
+      std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
       destroy(_Alloc& __a, _Ptr __p)
       noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p))))
       { _Base_type::destroy(__a, std::__to_address(__p)); }
@@ -95,7 +97,7 @@ template<typename _Alloc, typename = typename _Alloc::value_type>
     static constexpr _Alloc _S_select_on_copy(const _Alloc& __a)
     { return _Base_type::select_on_container_copy_construction(__a); }
 
-    static constexpr void _S_on_swap(_Alloc& __a, _Alloc& __b)
+    static _GLIBCXX14_CONSTEXPR void _S_on_swap(_Alloc& __a, _Alloc& __b)
     { std::__alloc_on_swap(__a, __b); }
 
     static constexpr bool _S_propagate_on_copy_assign()