我正在尝试使用C++ 14 init-capture功能通过捕获在lambda中移动unique_ptr.出于某种原因,gcc和clang都拒绝编译我的代码,坚持认为我正在尝试复制一个unique_ptr显然不起作用的代码.我认为避免复制正是init-capture + std::move功能的重点 - 实际上,传递unique_ptr似乎是每个人使用的主要示例.
我究竟做错了什么?
#include <functional>
#include <iostream>
#include <memory>
#include <string>
void runFunc(std::function<void()>&& f) {
auto ff = std::move(f);
ff();
}
int main() {
auto ptr = std::make_unique<std::string>("hello world\n");
runFunc([captured_ptr = std::move(ptr)]() {
std::cout << *captured_ptr;
});
}
Run Code Online (Sandbox Code Playgroud)
gcc的输出:
http://coliru.stacked-crooked.com/a/d91a480b2b6428ac
g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
In file included from main.cpp:1:0:
/usr/local/include/c++/5.2.0/functional: In instantiation of 'static void std::_Function_base::_Base_manager<_Functor>::_M_clone(std::_Any_data&, const std::_Any_data&, std::false_type) [with _Functor = main()::<lambda()>; std::false_type = …Run Code Online (Sandbox Code Playgroud)