summaryrefslogtreecommitdiffstats
path: root/libcxx/include/__functional_03
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2015-02-10 16:48:45 +0000
committerEric Fiselier <eric@efcs.ca>2015-02-10 16:48:45 +0000
commit54519a6be9296fb115b949f1f0785d9cbfacc7c5 (patch)
treed99921a0bd8162f333fba7fe5ecd741c09e89805 /libcxx/include/__functional_03
parent51544023a955929cbb3d105421b2e59f6be43964 (diff)
downloadbcm5719-llvm-54519a6be9296fb115b949f1f0785d9cbfacc7c5.tar.gz
bcm5719-llvm-54519a6be9296fb115b949f1f0785d9cbfacc7c5.zip
[libcxx] Fix PR 22468 - std::function<void()> does not accept non-void-returning functions
Summary: The bug can be found here: http://llvm.org/bugs/show_bug.cgi?id=22468 `__invoke_void_return_wrapper` is needed to properly handle calling a function that returns a value but where the std::function return type is void. Without this '-Wsystem-headers' will cause `function::operator()(...)` to not compile. Reviewers: eugenis, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7444 llvm-svn: 228705
Diffstat (limited to 'libcxx/include/__functional_03')
-rw-r--r--libcxx/include/__functional_0312
1 files changed, 8 insertions, 4 deletions
diff --git a/libcxx/include/__functional_03 b/libcxx/include/__functional_03
index d8a9f05fa12..157d6bf8932 100644
--- a/libcxx/include/__functional_03
+++ b/libcxx/include/__functional_03
@@ -369,7 +369,8 @@ template<class _Fp, class _Alloc, class _Rp>
_Rp
__func<_Fp, _Alloc, _Rp()>::operator()()
{
- return __invoke(__f_.first());
+ typedef __invoke_void_return_wrapper<_Rp> _Invoker;
+ return _Invoker::__call(__f_.first());
}
#ifndef _LIBCPP_NO_RTTI
@@ -452,7 +453,8 @@ template<class _Fp, class _Alloc, class _Rp, class _A0>
_Rp
__func<_Fp, _Alloc, _Rp(_A0)>::operator()(_A0 __a0)
{
- return __invoke(__f_.first(), __a0);
+ typedef __invoke_void_return_wrapper<_Rp> _Invoker;
+ return _Invoker::__call(__f_.first(), __a0);
}
#ifndef _LIBCPP_NO_RTTI
@@ -535,7 +537,8 @@ template<class _Fp, class _Alloc, class _Rp, class _A0, class _A1>
_Rp
__func<_Fp, _Alloc, _Rp(_A0, _A1)>::operator()(_A0 __a0, _A1 __a1)
{
- return __invoke(__f_.first(), __a0, __a1);
+ typedef __invoke_void_return_wrapper<_Rp> _Invoker;
+ return _Invoker::__call(__f_.first(), __a0, __a1);
}
#ifndef _LIBCPP_NO_RTTI
@@ -618,7 +621,8 @@ template<class _Fp, class _Alloc, class _Rp, class _A0, class _A1, class _A2>
_Rp
__func<_Fp, _Alloc, _Rp(_A0, _A1, _A2)>::operator()(_A0 __a0, _A1 __a1, _A2 __a2)
{
- return __invoke(__f_.first(), __a0, __a1, __a2);
+ typedef __invoke_void_return_wrapper<_Rp> _Invoker;
+ return _Invoker::__call(__f_.first(), __a0, __a1, __a2);
}
#ifndef _LIBCPP_NO_RTTI
OpenPOWER on IntegriCloud