小编Aar*_*onI的帖子

为什么lambda init-capture不能用于unique_ptr?

我正在尝试使用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)

c++ lambda c++14

7
推荐指数
1
解决办法
1723
查看次数

标签 统计

c++ ×1

c++14 ×1

lambda ×1