]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add workaround to std::variant for Clang bug 31852
authorJonathan Wakely <jwakely@redhat.com>
Wed, 4 Jul 2018 13:59:21 +0000 (14:59 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 4 Jul 2018 13:59:21 +0000 (14:59 +0100)
Backport from mainline
2018-03-26  Jonathan Wakely  <jwakely@redhat.com>

* include/std/variant (__get): Qualify calls to avoid ADL.
(__select_index): Adjust whitespace.
(variant): Add using-declaration to workaround Clang bug.

From-SVN: r262407

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/variant

index 65ffd2c708b29910afa8d64bbcbc649d42ef9e8c..e0f4d61e33bfc125bee22bc6128317ab340d0602 100644 (file)
@@ -1,5 +1,12 @@
 2018-07-04  Jonathan Wakely  <jwakely@redhat.com>
 
+       Backport from mainline
+       2018-03-26  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/variant (__get): Qualify calls to avoid ADL.
+       (__select_index): Adjust whitespace.
+       (variant): Add using-declaration to workaround Clang bug.
+
        Backport from mainline
        2018-05-24  Maya Rashish  <coypu@sdf.org>
 
index b31d774375d561146618badcc6a41047900cfdee..6762a7bb250b271f8518937a85a51b735ab377bc 100644 (file)
@@ -229,13 +229,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template<size_t _Np, typename _Union>
     constexpr decltype(auto) __get(in_place_index_t<_Np>, _Union&& __u)
-    { return __get(in_place_index<_Np-1>, std::forward<_Union>(__u)._M_rest); }
+    {
+      return __variant::__get(in_place_index<_Np-1>,
+                             std::forward<_Union>(__u)._M_rest);
+    }
 
   // Returns the typed storage for __v.
   template<size_t _Np, typename _Variant>
     constexpr decltype(auto) __get(_Variant&& __v)
     {
-      return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
+      return __variant::__get(std::in_place_index<_Np>,
+                             std::forward<_Variant>(__v)._M_u);
     }
 
   // Various functions as "vtable" entries, where those vtables are used by
@@ -324,10 +328,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template <typename... _Types>
   using __select_index =
-    typename __select_int::_Select_int_base<sizeof...(_Types)+1,
+    typename __select_int::_Select_int_base<sizeof...(_Types) + 1,
                                            unsigned char,
-                                           unsigned short>
-    ::type::value_type;
+                                           unsigned short>::type::value_type;
 
   template<typename... _Types>
     struct _Variant_storage<false, _Types...>
@@ -1159,6 +1162,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #undef _VARIANT_RELATION_FUNCTION_TEMPLATE
 
+#ifdef __clang__
+    public:
+      using _Base::_M_u; // See https://bugs.llvm.org/show_bug.cgi?id=31852
+    private:
+#endif
+
       template<size_t _Np, typename _Vp>
        friend constexpr decltype(auto) __detail::__variant::
 #if _GLIBCXX_INLINE_VERSION