Commit 4b7a3ab8 by Jonathan Wakely Committed by Jonathan Wakely

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
parent 7fb65a87
2019-05-10 Jonathan Wakely <jwakely@redhat.com> 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 PR libstdc++/90388
* include/bits/unique_ptr.h (default_delete, default_delete<T[]>): * include/bits/unique_ptr.h (default_delete, default_delete<T[]>):
Use _Require for constraints. Use _Require for constraints.
......
...@@ -402,7 +402,7 @@ namespace __variant ...@@ -402,7 +402,7 @@ namespace __variant
{ _M_reset(); } { _M_reset(); }
void* void*
_M_storage() const _M_storage() const noexcept
{ {
return const_cast<void*>(static_cast<const void*>( return const_cast<void*>(static_cast<const void*>(
std::addressof(_M_u))); std::addressof(_M_u)));
...@@ -432,11 +432,11 @@ namespace __variant ...@@ -432,11 +432,11 @@ namespace __variant
_M_index(_Np) _M_index(_Np)
{ } { }
void _M_reset() void _M_reset() noexcept
{ _M_index = variant_npos; } { _M_index = variant_npos; }
void* void*
_M_storage() const _M_storage() const noexcept
{ {
return const_cast<void*>(static_cast<const void*>( return const_cast<void*>(static_cast<const void*>(
std::addressof(_M_u))); std::addressof(_M_u)));
...@@ -760,7 +760,7 @@ namespace __variant ...@@ -760,7 +760,7 @@ namespace __variant
// Returns the raw storage for __v. // Returns the raw storage for __v.
template<typename _Variant> template<typename _Variant>
void* __get_storage(_Variant&& __v) void* __get_storage(_Variant&& __v) noexcept
{ return __v._M_storage(); } { return __v._M_storage(); }
template <typename _Maybe_variant_cookie, typename _Variant> template <typename _Maybe_variant_cookie, typename _Variant>
...@@ -1556,10 +1556,12 @@ namespace __variant ...@@ -1556,10 +1556,12 @@ namespace __variant
#endif #endif
template<size_t _Np, typename _Vp> 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> 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) \ #define _VARIANT_RELATION_FUNCTION_TEMPLATE(__OP) \
template<typename... _Tp> \ template<typename... _Tp> \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment