folly::fibers: do not move out of lvalue references
authorSven Over <over@fb.com>
Mon, 28 Mar 2016 21:13:24 +0000 (14:13 -0700)
committerFacebook Github Bot 6 <facebook-github-bot-6-bot@fb.com>
Mon, 28 Mar 2016 21:20:22 +0000 (14:20 -0700)
commit6f323462a05f5726838af752b15af84ee6b2211b
tree8b34fe4a39cb95c0a257ff25270c05e1c3f5dfdf
parent8ff7c8b8270a20fd768b57ea6c1b6dd48d849e9f
folly::fibers: do not move out of lvalue references

Summary:If you pass an lvalue to folly::fibers::Fiber::setFunction or
setFunctionFinally, you do not expect that those methods move
the function out of your lvalue.

This diff uses std::forward for perfect forwarding, so if an lvalue
is passed, a copy is made.

If and when when start using folly::Function for storing the
functions in the Fiber object, passing an lvalue will trigger a
compiler error because folly::Function is not copyable. That is
a good thing, as it enforces calling setFunction with std::move
if you use a named object, making clear that the named object
gets moved out of. Often people will pass temporary objects
(like a lambda defined i- place), which a rvalues anyway, so
this will not be a problem anyway.

Reviewed By: andriigrynenko

Differential Revision: D3102685

fb-gh-sync-id: 87bf3135f7f6630766f97be351599ff488e4b796
fbshipit-source-id: 87bf3135f7f6630766f97be351599ff488e4b796
folly/experimental/fibers/Fiber-inl.h
folly/experimental/fibers/FiberManager-inl.h