以下代码在GCC 4.9.3下引发错误.
#include using namespace std; struct Movable { Movable(const Movable&) = delete; Movable(Movable&&) = default; }; class Foo { const map m; Foo(map&& _m) : m{_m} {} };
潜在的错误是use of deleted function 'Movable::Movable(const Movable&)'- 但AFAICS它不应该试图复制底层的Movable.
use of deleted function 'Movable::Movable(const Movable&)'
由于_m有名称,使用时它是左值,你必须使用std::move:
_m
std::move
class Foo { const map m; Foo(map&& _m) : m{std::move(_m)} {} };