Add workaround to std::variant for Clang bug 31852
* include/std/variant (__get): Qualify calls to avoid ADL. (__select_index): Adjust whitespace. (variant): Add using-declaration to workaround Clang bug. From-SVN: r258854
This commit is contained in:
parent
46dbeb4085
commit
aafaa3254e
2 changed files with 20 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
||||
2018-03-22 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/85040
|
||||
|
|
|
@ -223,13 +223,17 @@ namespace __variant
|
|||
|
||||
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
|
||||
|
@ -358,10 +362,9 @@ namespace __variant
|
|||
|
||||
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...>
|
||||
|
@ -1304,6 +1307,12 @@ namespace __variant
|
|||
|
||||
#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::__get(_Vp&& __v);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue