【发布时间】:2018-07-31 08:40:38
【问题描述】:
在下面的代码中
#include <memory>
#include <thread>
#include <utility>
void f1(std::unique_ptr<int>&& uptr) {}
void f(std::unique_ptr<int>&& uptr)
{
auto thread = std::thread([uptr{ std::move(uptr) }]() {
f1(std::move(uptr));
});
}
int main()
{
return 0;
}
无法编译 lambda 内对 std::move 的调用:
[x86-64 gcc 8.1 #1] error: binding reference of type'std::unique_ptr<int>&&'
to 'std::remove_reference<const> std::unique_ptr<int>&>::type'
{aka 'const std::unique_ptr<int>'} discards qualifiers
现场演示:https://godbolt.org/g/9dQhEX
为什么会出现此错误,我该如何解决? const来自哪里?
【问题讨论】: