more work

This commit is contained in:
Naios 2015-06-19 01:16:32 +02:00
parent ac169af4d3
commit 3333f01e33

View File

@ -58,10 +58,6 @@ namespace detail
template<typename _NextRTy, typename... _NextATy> template<typename _NextRTy, typename... _NextATy>
struct unary_chainer; struct unary_chainer;
// multiple_all_chainer forward declaration.
template<typename... _CTy>
struct multiple_all_chainer;
// creates an empty callback. // creates an empty callback.
template<typename _FTy> template<typename _FTy>
struct create_empty_callback; struct create_empty_callback;
@ -99,9 +95,25 @@ namespace detail
typedef typename result_t::CallbackFunction callback_t; typedef typename result_t::CallbackFunction callback_t;
}; };
template<typename... _CTy> // Void returning functionals
struct multiple_all_chainer<_CTy...> template <typename _CTy>
auto remove_void(_CTy&& functional)
-> typename std::enable_if<typename std::is_void<typename std::result_of<_CTy>::type>::value,
typename convert_void_to_continuable<typename std::result_of<_CTy>::type>::type>::type
{ {
}
// Non void returning functionals (route through)
template <typename _CTy>
auto remove_void(_CTy&& functional)
-> typename std::enable_if<!typename std::is_void<typename std::result_of<_CTy>::type>::value, _CTy>::type
{
}
template<typename... _CTy>
struct multiple_all_chainer
{
}; };
template <typename _CTy> template <typename _CTy>
@ -271,7 +283,7 @@ namespace detail
} }
template<typename... _CTy> template<typename... _CTy>
_ContinuableImpl& _all(_CTy&&...) _ContinuableImpl& _wrap_all(_CTy&&...)
{ {
typedef multiple_all_chainer<_CTy...> type; typedef multiple_all_chainer<_CTy...> type;
@ -281,10 +293,9 @@ namespace detail
/// Placeholder /// Placeholder
template<typename... _CTy> template<typename... _CTy>
auto all(_CTy&&... functionals) auto all(_CTy&&... functionals)
-> decltype((_ContinuableImpl*)(nullptr)-> -> _ContinuableImpl&
_all(box_continuable(std::forward<_CTy>(std::declval<_CTy>))...))
{ {
return _all(box_continuable(std::forward<_CTy>(functionals))...); return *this;
} }
/// Placeholder /// Placeholder