Summary:
GCC can't compile code that passes a MoveWrapper into a lambda
in some cases. For example if the capture list has
[someConstObject, myMoveWrapper], gcc 4.7 fails. This specific case
works with gcc 4.8, but other cases (e.g. [this, myMoveWrapper]) still
fail.
This diff is a hack that makes code like that compile. It can be
removed, along with MoveWrapper itself once we move to C++14 with its
extended lambda syntax.
Test Plan: fbmake
Reviewed By: hans@fb.com
FB internal diff:
D1032585
MoveWrapper(T&& t) : value(std::move(t)) {}
/// copy is move
- MoveWrapper(MoveWrapper& other) : value(std::move(other.value)) {}
+ MoveWrapper(const MoveWrapper& other) : value(std::move(other.value)) {}
/// move is also move
MoveWrapper(MoveWrapper&& other) : value(std::move(other.value)) {}
MoveWrapper& operator=(MoveWrapper&&) = delete;
private:
- T value;
+ mutable T value;
};
template <class T>