以下は、ローカル変数をクロージャーにバインドする最も安価な方法であると思います。
void ByRValueReference(A&& a) {
}
std::function<void ()> CreateClosureByRValueReference() {
A a;
std::function<void ()> f = std::bind(&ByRValueReference, std::move(a)); // !!!
return f;
}
ただし、Clang 3.1 ではコンパイルできません。
error: no viable conversion from '__bind<void (*)(A &&), A>' to 'std::function<void ()>'
および gcc 4.6.1:
/usr/include/c++/4.6/functional:1778:2: error: no match for call to ‘(std::_Bind<void (*(A))(A&&)>) ()’
標準に違反していますか、それとも標準ライブラリが壊れているだけですか?