我正在尝试编译以下代码:
#include <utility>
struct C2 {
C2() = default;
C2(C2 const&) = delete;
C2(C2&&) = default;
};
int main() {
C2 p2;
([p2_1{ std::move(p2) }]() {
auto p2_2 = std::move(p2_1); // <---
})();
return 0;
}
然而,这段代码无法编译并出现错误,指出对 p2_2
的赋值调用了被删除的函数,即拷贝构造函数。请注意,对 p2_1
的移动是可以的。为什么没有使用移动构造函数?
[&p2]() { auto p2_2 = std::move(p2); }
。 - Remy Lebeau