mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-28 13:34:59 +08:00
re PR libstdc++/52942 (using std::ref with a std::unordered_map fails to compile)
2012-04-12 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/52942 * include/bits/stl_function.h (_Identity, _Select1st, _Select2nd): In C++11 mode do not derive from std::unary_function. * include/ext/functional (identity, select1st, select2nd): Adjust. * testsuite/23_containers/unordered_map/requirements/52942.cc: New. * testsuite/23_containers/unordered_set/requirements/52942.cc: Likewise. From-SVN: r186375
This commit is contained in:
parent
5f1fab5819
commit
b9b0921497
@ -1,3 +1,12 @@
|
||||
2012-04-12 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/52942
|
||||
* include/bits/stl_function.h (_Identity, _Select1st, _Select2nd):
|
||||
In C++11 mode do not derive from std::unary_function.
|
||||
* include/ext/functional (identity, select1st, select2nd): Adjust.
|
||||
* testsuite/23_containers/unordered_map/requirements/52942.cc: New.
|
||||
* testsuite/23_containers/unordered_set/requirements/52942.cc: Likewise.
|
||||
|
||||
2012-04-11 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR libstdc++/52924
|
||||
|
@ -1,6 +1,7 @@
|
||||
// Functor implementations -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
|
||||
// 2011, 2012
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
@ -471,7 +472,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
/** @} */
|
||||
|
||||
template<typename _Tp>
|
||||
struct _Identity : public unary_function<_Tp,_Tp>
|
||||
struct _Identity
|
||||
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
||||
// unary_function itself is deprecated in C++11 and deriving from
|
||||
// it can even be a nuisance (see PR 52942).
|
||||
: public unary_function<_Tp,_Tp>
|
||||
#endif
|
||||
{
|
||||
_Tp&
|
||||
operator()(_Tp& __x) const
|
||||
@ -483,8 +489,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
};
|
||||
|
||||
template<typename _Pair>
|
||||
struct _Select1st : public unary_function<_Pair,
|
||||
typename _Pair::first_type>
|
||||
struct _Select1st
|
||||
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
||||
: public unary_function<_Pair, typename _Pair::first_type>
|
||||
#endif
|
||||
{
|
||||
typename _Pair::first_type&
|
||||
operator()(_Pair& __x) const
|
||||
@ -508,8 +516,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
};
|
||||
|
||||
template<typename _Pair>
|
||||
struct _Select2nd : public unary_function<_Pair,
|
||||
typename _Pair::second_type>
|
||||
struct _Select2nd
|
||||
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
||||
: public unary_function<_Pair, typename _Pair::second_type>
|
||||
#endif
|
||||
{
|
||||
typename _Pair::second_type&
|
||||
operator()(_Pair& __x) const
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Functional extensions -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
|
||||
// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
@ -183,7 +183,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
* @addtogroup SGIextensions
|
||||
*/
|
||||
template <class _Tp>
|
||||
struct identity : public std::_Identity<_Tp> {};
|
||||
struct identity
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
: public std::unary_function<_Tp,_Tp>,
|
||||
public std::_Identity<_Tp> {};
|
||||
#else
|
||||
: public std::_Identity<_Tp> {};
|
||||
#endif
|
||||
|
||||
/** @c select1st and @c select2nd are extensions provided by SGI. Their
|
||||
* @c operator()s
|
||||
@ -197,11 +203,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
*/
|
||||
/// An \link SGIextensions SGI extension \endlink.
|
||||
template <class _Pair>
|
||||
struct select1st : public std::_Select1st<_Pair> {};
|
||||
struct select1st
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
: public std::unary_function<_Pair, typename _Pair::first_type>,
|
||||
public std::_Select1st<_Pair> {};
|
||||
#else
|
||||
: public std::_Select1st<_Pair> {};
|
||||
#endif
|
||||
|
||||
/// An \link SGIextensions SGI extension \endlink.
|
||||
template <class _Pair>
|
||||
struct select2nd : public std::_Select2nd<_Pair> {};
|
||||
struct select2nd
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
: public std::unary_function<_Pair, typename _Pair::second_type>,
|
||||
public std::_Select2nd<_Pair> {};
|
||||
#else
|
||||
: public std::_Select2nd<_Pair> {};
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
// extension documented next
|
||||
|
@ -0,0 +1,37 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++11" }
|
||||
|
||||
// Copyright (C) 2012 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 Pred 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/>.
|
||||
|
||||
#include <unordered_map>
|
||||
#include <functional>
|
||||
|
||||
struct TFoo {};
|
||||
|
||||
struct TFoo_hash
|
||||
{
|
||||
std::size_t operator()(const TFoo &) const { return 0; }
|
||||
};
|
||||
|
||||
void f1(std::unordered_map<TFoo, int, TFoo_hash> &) {}
|
||||
|
||||
void f2()
|
||||
{
|
||||
std::unordered_map<TFoo, int, TFoo_hash> map1;
|
||||
std::bind(f1, std::ref(map1));
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++11" }
|
||||
|
||||
// Copyright (C) 2012 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 Pred 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/>.
|
||||
|
||||
#include <unordered_set>
|
||||
#include <functional>
|
||||
|
||||
struct TFoo {};
|
||||
|
||||
struct TFoo_hash
|
||||
{
|
||||
std::size_t operator()(const TFoo &) const { return 0; }
|
||||
};
|
||||
|
||||
void f1(std::unordered_set<TFoo, TFoo_hash> &) {}
|
||||
|
||||
void f2()
|
||||
{
|
||||
std::unordered_set<TFoo, TFoo_hash> set1;
|
||||
std::bind(f1, std::ref(set1));
|
||||
}
|
Loading…
Reference in New Issue
Block a user