From: Jonathan Wakely Date: Tue, 29 Oct 2019 20:16:57 +0000 (+0000) Subject: Fix compilation errors with Clang X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=540218dd246231a52e377d42e81f467bd7d73b46;p=gcc.git Fix compilation errors with Clang * 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ad595aa7a65..e9908841420 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2019-10-29 Jonathan Wakely + * 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. diff --git a/libstdc++-v3/include/bits/alloc_traits.h b/libstdc++-v3/include/bits/alloc_traits.h index 26d6d26ae48..55211ac1d72 100644 --- a/libstdc++-v3/include/bits/alloc_traits.h +++ b/libstdc++-v3/include/bits/alloc_traits.h @@ -241,13 +241,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION = typename __construct_helper<_Tp, _Args...>::type; template - 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 - 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 - 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 - 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 struct allocator_traits> @@ -562,7 +566,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template - 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 - 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 - constexpr void + _GLIBCXX14_CONSTEXPR void __alloc_on_swap(_Alloc& __one, _Alloc& __two) { typedef allocator_traits<_Alloc> __traits; diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h index a16196ffe74..c714148e037 100644 --- a/libstdc++-v3/include/bits/stl_construct.h +++ b/libstdc++-v3/include/bits/stl_construct.h @@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Destroy the object pointed to by a pointer type. */ template - _GLIBCXX_CONSTEXPR inline void + _GLIBCXX14_CONSTEXPR inline void _Destroy(_Tp* __pointer) { #if __cplusplus > 201703L diff --git a/libstdc++-v3/include/ext/alloc_traits.h b/libstdc++-v3/include/ext/alloc_traits.h index 052d811ec01..c7b8e5d4ba3 100644 --- a/libstdc++-v3/include/ext/alloc_traits.h +++ b/libstdc++-v3/include/ext/alloc_traits.h @@ -76,7 +76,8 @@ template public: // overload construct for non-standard pointer types template - 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 // overload destroy for non-standard pointer types template - 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 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()