diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-03-02 03:43:36 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-03-02 03:43:36 +0000 |
commit | 5782e3094161376c1679c2e5099445b09cf2bf75 (patch) | |
tree | 291669e26106e3d48236881073e46a0afaa1b3a9 | |
parent | 9a642ccae4ba5ca86c58f7770fd833158530bf88 (diff) | |
download | gcc-5782e3094161376c1679c2e5099445b09cf2bf75.zip gcc-5782e3094161376c1679c2e5099445b09cf2bf75.tar.gz gcc-5782e3094161376c1679c2e5099445b09cf2bf75.tar.bz2 |
PR 79798 Fix incorrect use of std::result_of in std::bind
PR libstdc++/79798
* include/std/functional (bind::_Res_type_impl): Fix incorrect use of
result_of that loses top-level cv-qualifiers.
* testsuite/20_util/bind/79798.cc: New test.
From-SVN: r245827
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/bind/79798.cc | 33 |
3 files changed, 41 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c7e277a..537d9d7 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2017-03-02 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/79798 + * include/std/functional (bind::_Res_type_impl): Fix incorrect use of + result_of that loses top-level cv-qualifiers. + * testsuite/20_util/bind/79798.cc: New test. + 2017-03-01 Gerald Pfeifer <gerald@pfeifer.com> * doc/xml/manual/documentation_hacking.xml: Tweak link to diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 4f3d8b3..ea36dd0 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -502,7 +502,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) template<typename _Fn, typename _CallArgs, typename... _BArgs> using _Res_type_impl - = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>...) >::type; + = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type; template<typename _CallArgs> using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>; diff --git a/libstdc++-v3/testsuite/20_util/bind/79798.cc b/libstdc++-v3/testsuite/20_util/bind/79798.cc new file mode 100644 index 0000000..9780ff4 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/bind/79798.cc @@ -0,0 +1,33 @@ +// Copyright (C) 2017 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/>. + +// { dg-do compile { target c++11 } } + +#include <functional> + +// PR libstdc++/79798 + +struct X { }; +const X f(int); + +struct Y { + void operator()(X&&) = delete; + int operator()(const X&&); +}; + +auto b = std::bind(Y(), std::bind(f, std::placeholders::_1)); +auto i = b(1); |