From bc8478090c5c2491c2da836c236d78b1a561c195 Mon Sep 17 00:00:00 2001 From: Hans Fugal Date: Mon, 2 Mar 2015 13:27:49 -0800 Subject: [PATCH] makeMoveWrapper(lvalue) Summary: Because why not? Test Plan: new unit tests Reviewed By: hannesr@fb.com Subscribers: trunkagent, exa, folly-diffs@, yfeldblum, marccelani FB internal diff: D1866123 Signature: t1:1866123:1425331395:742369597757456e5925af55c5d4198b607126f1 --- folly/MoveWrapper.h | 9 ++++++--- folly/test/MoveWrapperTest.cpp | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/folly/MoveWrapper.h b/folly/MoveWrapper.h index 7300f9a8..6fbd710e 100644 --- a/folly/MoveWrapper.h +++ b/folly/MoveWrapper.h @@ -63,9 +63,12 @@ class MoveWrapper { mutable T value; }; -template -MoveWrapper makeMoveWrapper(T&& t) { - return MoveWrapper(std::forward(t)); +/// Make a MoveWrapper from the argument. Because the name "makeMoveWrapper" +/// is already quite transparent in its intent, this will work for lvalues as +/// if you had wrapped them in std::move. +template ::type> +MoveWrapper makeMoveWrapper(T&& t) { + return MoveWrapper(std::forward(t)); } } // namespace diff --git a/folly/test/MoveWrapperTest.cpp b/folly/test/MoveWrapperTest.cpp index 6d660bea..b5a21c7e 100644 --- a/folly/test/MoveWrapperTest.cpp +++ b/folly/test/MoveWrapperTest.cpp @@ -34,4 +34,19 @@ TEST(makeMoveWrapper, NonEmpty) { EXPECT_EQ(**p, 5); } +TEST(makeMoveWrapper, rvalue) { + std::unique_ptr p; + makeMoveWrapper(std::move(p)); +} + +TEST(makeMoveWrapper, lvalue) { + std::unique_ptr p; + makeMoveWrapper(p); +} + +TEST(makeMoveWrapper, lvalue_copyable) { + std::shared_ptr p; + makeMoveWrapper(p); +} + } // namespace -- 2.34.1