summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-12 18:11:20 +0000
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-12 18:11:20 +0000
commit1f4faf9c02d97ad6cd83eeb00916fd7fd0e8582f (patch)
tree4238c6237f0ae170dc50cc4d9f315fe01f6d352f /libstdc++-v3
parenta35745ba8762e5968b97bfde12fcf2120a423de7 (diff)
downloadgcc-1f4faf9c02d97ad6cd83eeb00916fd7fd0e8582f.tar.gz
libstdc++/68995 qualify calls to __callable_functor
PR libstdc++/68995 * include/std/functional (_Function_handler::_M_invoke): Qualify __callable_functor. * testsuite/20_util/function/68995.cc: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@232288 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/std/functional9
-rw-r--r--libstdc++-v3/testsuite/20_util/function/68995.cc32
3 files changed, 44 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 0116cd62e0d..03524342f84 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2016-01-12 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/68995
+ * include/std/functional (_Function_handler::_M_invoke): Qualify
+ __callable_functor.
+ * testsuite/20_util/function/68995.cc: New.
+
2015-12-16 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/68912
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index d84fd264bc2..654ecc0e1b1 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -2051,7 +2051,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static _Res
_M_invoke(const _Any_data& __functor, _ArgTypes... __args)
{
- return __callable_functor(**_Base::_M_get_pointer(__functor))(
+ return std::__callable_functor(**_Base::_M_get_pointer(__functor))(
std::forward<_ArgTypes>(__args)...);
}
};
@@ -2066,7 +2066,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static void
_M_invoke(const _Any_data& __functor, _ArgTypes... __args)
{
- __callable_functor(**_Base::_M_get_pointer(__functor))(
+ std::__callable_functor(**_Base::_M_get_pointer(__functor))(
std::forward<_ArgTypes>(__args)...);
}
};
@@ -2146,8 +2146,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
typedef _Res _Signature_type(_ArgTypes...);
template<typename _Functor>
- using _Invoke = decltype(__callable_functor(std::declval<_Functor&>())
- (std::declval<_ArgTypes>()...) );
+ using _Invoke
+ = decltype(std::__callable_functor(std::declval<_Functor&>())
+ (std::declval<_ArgTypes>()...) );
// Used so the return type convertibility checks aren't done when
// performing overload resolution for copy construction/assignment.
diff --git a/libstdc++-v3/testsuite/20_util/function/68995.cc b/libstdc++-v3/testsuite/20_util/function/68995.cc
new file mode 100644
index 00000000000..75dafb4776b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/68995.cc
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 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-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <tr1/memory>
+#include <functional>
+#include <tr1/functional>
+
+std::tr1::shared_ptr<int> test() { return {}; }
+
+std::function<std::tr1::shared_ptr<int>()> func = test;
+std::function<std::tr1::shared_ptr<int>()> funcr = std::ref(test);
+
+void test2(std::tr1::shared_ptr<int>) { }
+
+std::function<void(std::tr1::shared_ptr<int>)> func2 = std::ref(test2);