diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-05-10 22:41:19 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-05-10 22:41:19 +0100 |
commit | 4b7a3ab82f1951b1ab808065cec829fecb27e206 (patch) | |
tree | 5b3730dd47e3684e8a955de2d3d5bce29b81492e | |
parent | 7fb65a875956bac7095c17c545f2bfa131209f50 (diff) | |
download | gcc-4b7a3ab82f1951b1ab808065cec829fecb27e206.zip gcc-4b7a3ab82f1951b1ab808065cec829fecb27e206.tar.gz gcc-4b7a3ab82f1951b1ab808065cec829fecb27e206.tar.bz2 |
PR libstdc++/90397 fix std::variant friend declarations
Clang diagnoses the inconsistent noexcept-specifier on the friend
declaration of __get. Add it, and also on __get_storage.
PR libstdc++/90397
* include/std/variant (_Variant_storage<false, Types...>::_M_storage())
(_Variant_storage<true, Types...>::_M_reset()))
(_Variant_storage<true, Types...>::_M_storage())): Add noexcept.
(__get_storage): Likewise.
(variant): Add noexcept to friend declarations for __get and
__get_storage.
From-SVN: r271079
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/std/variant | 14 |
2 files changed, 16 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c37cab4..1cc2970 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,13 @@ 2019-05-10 Jonathan Wakely <jwakely@redhat.com> + PR libstdc++/90397 + * include/std/variant (_Variant_storage<false, Types...>::_M_storage()) + (_Variant_storage<true, Types...>::_M_reset())) + (_Variant_storage<true, Types...>::_M_storage())): Add noexcept. + (__get_storage): Likewise. + (variant): Add noexcept to friend declarations for __get and + __get_storage. + PR libstdc++/90388 * include/bits/unique_ptr.h (default_delete, default_delete<T[]>): Use _Require for constraints. diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index 8c7d7f3..d539df1 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -402,7 +402,7 @@ namespace __variant { _M_reset(); } void* - _M_storage() const + _M_storage() const noexcept { return const_cast<void*>(static_cast<const void*>( std::addressof(_M_u))); @@ -432,11 +432,11 @@ namespace __variant _M_index(_Np) { } - void _M_reset() + void _M_reset() noexcept { _M_index = variant_npos; } void* - _M_storage() const + _M_storage() const noexcept { return const_cast<void*>(static_cast<const void*>( std::addressof(_M_u))); @@ -760,7 +760,7 @@ namespace __variant // Returns the raw storage for __v. template<typename _Variant> - void* __get_storage(_Variant&& __v) + void* __get_storage(_Variant&& __v) noexcept { return __v._M_storage(); } template <typename _Maybe_variant_cookie, typename _Variant> @@ -1556,10 +1556,12 @@ namespace __variant #endif template<size_t _Np, typename _Vp> - friend constexpr decltype(auto) __detail::__variant::__get(_Vp&& __v); + friend constexpr decltype(auto) + __detail::__variant::__get(_Vp&& __v) noexcept; template<typename _Vp> - friend void* __detail::__variant::__get_storage(_Vp&& __v); + friend void* + __detail::__variant::__get_storage(_Vp&& __v) noexcept; #define _VARIANT_RELATION_FUNCTION_TEMPLATE(__OP) \ template<typename... _Tp> \ |