First Step: Make use of lambda move capture.

This commit is contained in:
Denis Blank 2015-07-21 18:46:46 +02:00 committed by Naios
parent 941203e56e
commit 4923314615
2 changed files with 8 additions and 22 deletions

View File

@ -172,21 +172,17 @@ public:
typename detail::unary_chainer_t<_CTy, _ATy...>::arguments_t>::value,
"Given function signature isn't correct, for now it must match strictly!");
// Transfer the insert function to the local scope.
// Also use it as an r-value reference to try to get move semantics with c++11 lambdas.
ForwardFunction&& callback = std::move(_callback_insert);
auto&& corrected = detail::functional_traits<_ATy...>::
correct(std::forward<_CTy>(functional));
return typename detail::unary_chainer_t<_CTy, _ATy...>::continuable_t(
[corrected, callback](typename detail::unary_chainer_t<_CTy, _ATy...>::callback_t&& call_next)
[
corrected = detail::functional_traits<_ATy...>::correct(std::forward<_CTy>(functional)),
callback = std::move(_callback_insert)
]
(typename detail::unary_chainer_t<_CTy, _ATy...>::callback_t&& call_next) mutable
{
callback([corrected, call_next](_ATy&&... args) mutable
callback([corrected = std::move(corrected), call_next](_ATy&&... args) mutable
{
// Invoke the next callback
corrected(std::forward<_ATy>(args)...)
.invoke(std::move(call_next));
corrected(std::forward<_ATy>(args)...).invoke(std::move(call_next));
});
}, std::move(*this));

View File

@ -638,19 +638,9 @@ int main(int /*argc*/, char** /*argv*/)
})
.then([]
{
return Log("ok, now its really finished!").then(CastSpellPromise(2));
});
std::function<void()> callable = []
{
std::cout << "ok" << std::endl;
};
auto conv_test_1 = std::bind(callable);
conv_test_1(1, 1);
/*
continuable_returner<std::unique_ptr<int>> test26151_start(std::unique_ptr<int>(new int(5)));