I'm trying to create an std::function from a move-capturing lambda expression. Note that I can create a move-capturing lambda expression without problems; it's only when I try to wrap it in an std::function that I get an error.
For example:
auto pi = std::make_unique(0); // no problems here! auto foo = [q = std::move(pi)] { *q = 5; std::cout bar = foo; std::function bar{foo}; std::function bar{std::move(foo)}; std::function bar = std::move(foo); std::function bar{std::forward<:function>>(foo)}; std::function bar = std::forward<:function>>(foo);
I'll explain why I want to write something like this. I've written a UI library which, similar to jQuery or JavaFX, allows the user to handle mouse/keyboard events by passing std::functions to methods with names like on_mouse_down(), on_mouse_drag(), push_undo_action(), etc.
Obviously, the std::function I want to pass in should ideally use a move-capturing lambda expression, otherwise I need to resort to the ugly "release/acquire-in-lambda" idiom I was using when C++11 was the standard:
std::functionbaz = [q = pi.release()] { std::unique_ptr p{q}; *p = 5; std::cout Note that calling baz twice would be an error in the above code. However, in my code, this closure is guaranteed to be called exactly once.
BTW, in my real code, I'm not passing an std::unique_ptr
, but something more interesting. Finally, I'm using Xcode6-Beta4 which uses the following version of clang:
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) Target: x86_64-apple-darwin13.3.0 Thread model: posix
0 answers
Hot tools Tags
Hot Questions
Popular tool
vc9-vc14 (32+64 bit) runtime library collection (link below)
Download the collection of runtime libraries required for phpStudy installation
VC9 32-bit
VC9 32-bit phpstudy integrated installation environment runtime library
PHP programmer toolbox full version
Programmer Toolbox v1.0 PHP Integrated Environment
VC11 32-bit
VC11 32-bit phpstudy integrated installation environment runtime library
SublimeText3 Chinese version
Chinese version, very easy to use
Hot Topics
20416
7
13574
4






