re PR libstdc++/60497 (unique_ptr<T> tries to complete its type T even though it's not required to be a complete type)

PR libstdc++/60497
	* include/std/tuple (get): Qualify calls to prevent ADL.
	* testsuite/20_util/tuple/60497.cc: New.

From-SVN: r209381
This commit is contained in:
Jonathan Wakely 2014-04-14 16:32:58 +01:00 committed by Jonathan Wakely
parent e364673d87
commit 39e6a690ec
3 changed files with 46 additions and 5 deletions

View file

@ -9,6 +9,10 @@
* include/bits/allocator.h (operator==, operator!=): Add exception
specifications.
PR libstdc++/60497
* include/std/tuple (get): Qualify calls to prevent ADL.
* testsuite/20_util/tuple/60497.cc: New.
2014-04-11 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/59434

View file

@ -755,14 +755,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typename tuple_element<__i, tuple<_Elements...>>::type
>::type
get(tuple<_Elements...>& __t) noexcept
{ return __get_helper<__i>(__t); }
{ return std::__get_helper<__i>(__t); }
template<std::size_t __i, typename... _Elements>
constexpr typename __add_c_ref<
typename tuple_element<__i, tuple<_Elements...>>::type
>::type
get(const tuple<_Elements...>& __t) noexcept
{ return __get_helper<__i>(__t); }
{ return std::__get_helper<__i>(__t); }
template<std::size_t __i, typename... _Elements>
constexpr typename __add_r_ref<
@ -786,17 +786,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename _Tp, typename... _Types>
constexpr _Tp&
get(tuple<_Types...>& __t) noexcept
{ return __get_helper2<_Tp>(__t); }
{ return std::__get_helper2<_Tp>(__t); }
template <typename _Tp, typename... _Types>
constexpr _Tp&&
get(tuple<_Types...>&& __t) noexcept
{ return std::move(__get_helper2<_Tp>(__t)); }
{ return std::move(std::__get_helper2<_Tp>(__t)); }
template <typename _Tp, typename... _Types>
constexpr const _Tp&
get(const tuple<_Types...>& __t) noexcept
{ return __get_helper2<_Tp>(__t); }
{ return std::__get_helper2<_Tp>(__t); }
#endif
// This class helps construct the various comparison operations on tuples

View file

@ -0,0 +1,37 @@
// { dg-options "-std=gnu++14" }
// { dg-do compile }
// Copyright (C) 2014 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// libstdc++/60497
#include <tuple>
struct A;
template<typename T> struct B { T t; };
using element_type = B<A>*;
using tuple_type = std::tuple<element_type>;
tuple_type t;
const tuple_type ct;
auto a = std::get<0>(t);
auto b = std::get<0>(ct);
auto c = std::get<element_type>(t);
auto d = std::get<element_type>(ct);