aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-05-10 22:41:19 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-05-10 22:41:19 +0100
commit4b7a3ab82f1951b1ab808065cec829fecb27e206 (patch)
tree5b3730dd47e3684e8a955de2d3d5bce29b81492e
parent7fb65a875956bac7095c17c545f2bfa131209f50 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libstdc++-v3/include/std/variant14
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> \