summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/std/future
diff options
context:
space:
mode:
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-19 13:26:08 +0000
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-19 13:26:08 +0000
commit409e2405e2f298311e26857cfe610a0865d5d763 (patch)
tree46bddda6e0625793f71e6f9abbe316c4f086c355 /libstdc++-v3/include/std/future
parente400b89a267e84f9753ba212b8ec2ce36a5328de (diff)
downloadppe42-gcc-409e2405e2f298311e26857cfe610a0865d5d763.tar.gz
ppe42-gcc-409e2405e2f298311e26857cfe610a0865d5d763.zip
2011-04-19 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/48521 * include/std/type_traits (result_of): Handle pointer to member. * include/std/functional (__invoke): Likewise. (_Function_to_function_pointer): Remove. (_Reference_wrapper_base): Provide nested types independent of unary_function and binary_function. (reference_wrapper::operator()): DR 2017. (ref(const A&&), cref(const A&&): Define as deleted. * include/std/future (async): Simplify SFINAE and use result_of to support pointer to member. * testsuite/20_util/reference_wrapper/invoke.cc: Test pointer to member. * testsuite/20_util/reference_wrapper/24803.cc: Likewise. * testsuite/20_util/reference_wrapper/typedefs.cc: Test for types instead of derivation from unary_function and binary_function. * testsuite/20_util/declval/requirements/1_neg.cc: Adjust. * testsuite/20_util/reference_wrapper/invoke-2.cc: New. * testsuite/20_util/reference_wrapper/ref_neg.c: New. * testsuite/20_util/reference_wrapper/typedefs-3.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172709 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/future')
-rw-r--r--libstdc++-v3/include/std/future18
1 files changed, 12 insertions, 6 deletions
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 7a62d5ecf28..f7035a9109a 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -142,11 +142,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
future<typename result_of<_Fn(_Args...)>::type>
async(launch __policy, _Fn&& __fn, _Args&&... __args);
+ template<typename _FnCheck, typename _Fn, typename... _Args>
+ struct __async_sfinae_helper
+ {
+ typedef future<typename result_of<_Fn(_Args...)>::type> type;
+ };
+
+ template<typename _Fn, typename... _Args>
+ struct __async_sfinae_helper<launch, _Fn, _Args...>
+ { };
+
template<typename _Fn, typename... _Args>
typename
- enable_if<!is_same<typename decay<_Fn>::type, launch>::value,
- future<decltype(std::declval<_Fn>()(std::declval<_Args>()...))>
- >::type
+ __async_sfinae_helper<typename decay<_Fn>::type, _Fn, _Args...>::type
async(_Fn&& __fn, _Args&&... __args);
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
@@ -1373,9 +1381,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// async, potential overload
template<typename _Fn, typename... _Args>
inline typename
- enable_if<!is_same<typename decay<_Fn>::type, launch>::value,
- future<decltype(std::declval<_Fn>()(std::declval<_Args>()...))>
- >::type
+ __async_sfinae_helper<typename decay<_Fn>::type, _Fn, _Args...>::type
async(_Fn&& __fn, _Args&&... __args)
{
return async(launch::any, std::forward<_Fn>(__fn),
OpenPOWER on IntegriCloud