From 0e2f3822859924a514e5a0d9d3230da775280fb3 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Sun, 1 May 2016 10:33:54 -0400 Subject: [PATCH] Bind promise with init capture if available, else use std::bind. --- examples/adapt_callbacks.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/adapt_callbacks.cpp b/examples/adapt_callbacks.cpp index 50b4095b..b8b7e953 100644 --- a/examples/adapt_callbacks.cpp +++ b/examples/adapt_callbacks.cpp @@ -106,11 +106,24 @@ AsyncAPI::errorcode write_ec( AsyncAPI & api, std::string const& data) { // happen with fibers::promise, a robust way to deal with the lifespan // issue is to bind 'promise' into our lambda. Since promise is move-only, // use initialization capture. +#if defined(__cpp_init_captures) api.init_write( data, - [&promise]( AsyncAPI::errorcode ec) mutable { + [promise = std::move(promise)]( AsyncAPI::errorcode ec) mutable { promise.set_value( ec); }); + +#else // ! defined(__cpp_init_captures) + // std::bind() workaround for initialization capture from + // http://stackoverflow.com/questions/8640393/move-capture-in-lambda + api.init_write( + data, + std::bind([](boost::fibers::promise< AsyncAPI::errorcode > & promise, + AsyncAPI::errorcode ec) { + promise.set_value( ec); + }, std::move(promise), std::placeholders::_1); +#endif // __cpp_init_captures + return future.get(); } //]