Commit a2284544 by Jonathan Wakely Committed by Jonathan Wakely

PR77998 Remove std::thread::_Invoker::result_type

	PR libstdc++/77998
	* include/std/future (__future_base::_Deferred_state)
	(__future_base::_Async_state_impl): Use decltype to deduce return
	type, instead of _Invoker::result_type.
	* include/std/thread (thread::_Invoker::operator()): Likewise.
	(thread::_Invoker::result_type): Remove.

From-SVN: r241236
parent 74cf9664
2016-10-17 Jonathan Wakely <jwakely@redhat.com> 2016-10-17 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/77998
* include/std/future (__future_base::_Deferred_state)
(__future_base::_Async_state_impl): Use decltype to deduce return
type, instead of _Invoker::result_type.
* include/std/thread (thread::_Invoker::operator()): Likewise.
(thread::_Invoker::result_type): Remove.
PR libstdc++/77987 PR libstdc++/77987
* include/bits/unique_ptr.h (unique_ptr<T[], D>::reset<U>(U)): Copy * include/bits/unique_ptr.h (unique_ptr<T[], D>::reset<U>(U)): Copy
value to pointer of the correct type to swap, to support conversions value to pointer of the correct type to swap, to support conversions
......
...@@ -561,10 +561,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -561,10 +561,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class _Async_state_commonV2; class _Async_state_commonV2;
#endif #endif
template<typename _BoundFn, typename = typename _BoundFn::result_type> template<typename _BoundFn,
typename _Res = decltype(std::declval<_BoundFn&>()())>
class _Deferred_state; class _Deferred_state;
template<typename _BoundFn, typename = typename _BoundFn::result_type> template<typename _BoundFn,
typename _Res = decltype(std::declval<_BoundFn&>()())>
class _Async_state_impl; class _Async_state_impl;
template<typename _Signature> template<typename _Signature>
......
...@@ -235,14 +235,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -235,14 +235,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using _Indices using _Indices
= typename _Build_index_tuple<tuple_size<_Tuple>::value>::__type; = typename _Build_index_tuple<tuple_size<_Tuple>::value>::__type;
using result_type auto
= decltype(std::declval<_Invoker>()._M_invoke(_Indices()));
result_type
operator()() operator()()
noexcept(noexcept(std::declval<_Invoker>()._M_invoke(_Indices()))) noexcept(noexcept(std::declval<_Invoker&>()._M_invoke(_Indices())))
-> decltype(std::declval<_Invoker&>()._M_invoke(_Indices()))
{ return _M_invoke(_Indices()); } { return _M_invoke(_Indices()); }
}; };
// Alias for _Invoker<tuple<DECAY_COPY(_Tp)...>> // Alias for _Invoker<tuple<DECAY_COPY(_Tp)...>>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment