delete const rvalue reference ctor of folly::Function
Summary: This code compiles and is causing stack overflow at runtime: ``` using F = folly::Function<void()>; void foo(F); F bar; auto baz = [bar = std::move(bar)] { foo(std::move(bar)); }; baz(); ``` The bug there is that `baz` is missing `mutable` keyword, so when constructing argument for `foo`, `F(const F&&)` is called, which is selecting `template <typename Fun> F(Fun&&)` (where `Fun = F const`) and we end up in an infinite `F<Fun>(Fun&&) <-> F<Fun>(Fun&&, SmallTag|HeapTag)` cycle. This diff transforms this easy-to-make-bug into compile-time error. Reviewed By: yfeldblum Differential Revision: D3810269 fbshipit-source-id: f80a18ab02bd0715d692cf67c3c8943f557c2982
Showing
Please register or sign in to comment