diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2012-03-27 20:25:12 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2012-03-27 21:25:12 +0100 |
commit | 28d5436f07e18147d0d2185b48a33d69e8c43ce5 (patch) | |
tree | 4c6ae0dab0d8cfdb62ecd5d97976b58d0293e3af /libstdc++-v3 | |
parent | 8c6d71c06b55848838ddc5303415908492bd6b72 (diff) | |
download | gcc-28d5436f07e18147d0d2185b48a33d69e8c43ce5.zip gcc-28d5436f07e18147d0d2185b48a33d69e8c43ce5.tar.gz gcc-28d5436f07e18147d0d2185b48a33d69e8c43ce5.tar.bz2 |
functional (mem_fn): Qualify to prevent ADL.
* include/std/functional (mem_fn): Qualify to prevent ADL.
* testsuite/20_util/function_objects/mem_fn/adl.cc: New.
From-SVN: r185895
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 12 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc | 44 |
3 files changed, 55 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1020c19..6003a00 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,10 @@ 2012-03-27 Jonathan Wakely <jwakely.gcc@gmail.com> + * include/std/functional (mem_fn): Qualify to prevent ADL. + * testsuite/20_util/function_objects/mem_fn/adl.cc: New. + +2012-03-27 Jonathan Wakely <jwakely.gcc@gmail.com> + * include/std/type_traits (result_of): Fix handling of cv-quals. * testsuite/20_util/result_of/1.cc: New. * testsuite/20_util/result_of/2.cc: New. diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 4be1bc7..14785dd 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -1,7 +1,7 @@ // <functional> -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 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 @@ -245,7 +245,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) >::type __invoke(_Functor& __f, _Args&&... __args) { - return mem_fn(__f)(std::forward<_Args>(__args)...); + return std::mem_fn(__f)(std::forward<_Args>(__args)...); } // To pick up function references (that will become function pointers) @@ -1709,12 +1709,12 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) template<typename _Member, typename _Class> inline _Mem_fn<_Member _Class::*> __callable_functor(_Member _Class::* &__p) - { return mem_fn(__p); } + { return std::mem_fn(__p); } template<typename _Member, typename _Class> inline _Mem_fn<_Member _Class::*> __callable_functor(_Member _Class::* const &__p) - { return mem_fn(__p); } + { return std::mem_fn(__p); } template<typename _Signature> class function; @@ -1970,7 +1970,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) static _Res _M_invoke(const _Any_data& __functor, _ArgTypes... __args) { - return mem_fn(_Base::_M_get_pointer(__functor)->__value)( + return std::mem_fn(_Base::_M_get_pointer(__functor)->__value)( std::forward<_ArgTypes>(__args)...); } }; @@ -2010,7 +2010,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) static void _M_invoke(const _Any_data& __functor, _ArgTypes... __args) { - mem_fn(_Base::_M_get_pointer(__functor)->__value)( + std::mem_fn(_Base::_M_get_pointer(__functor)->__value)( std::forward<_ArgTypes>(__args)...); } }; diff --git a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc new file mode 100644 index 0000000..907db84 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc @@ -0,0 +1,44 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// 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 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/>. + +#include <functional> + +namespace n { + struct X { int i; }; + void mem_fn(int X::*); +} + +using n::X; + +X x{}; +int X::* p = &X::i; + +int test01() +{ + auto ref = std::ref(p); + return ref(x); +} + +int test02() +{ + std::function<int(X)> fun(p); + return fun(x); +} + |