Revert D6366352: [folly] Split get_default() into two for deferred default construction
authorGiuseppe Ottaviano <ott@fb.com>
Tue, 21 Nov 2017 07:10:34 +0000 (23:10 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 21 Nov 2017 07:20:10 +0000 (23:20 -0800)
Summary:
This reverts commit db55b944ca63e565997094c11b90c4ebe98531ce

bypass-lint

Differential Revision: D6366352

fbshipit-source-id: e25906409186b077ef9117aa524cc7c86314ae12

folly/MapUtil.h
folly/test/MapUtilTest.cpp

index b95da41..b1fbfad 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <folly/Conv.h>
 #include <folly/Optional.h>
-#include <folly/functional/Invoke.h>
 #include <tuple>
 
 namespace folly {
@@ -27,27 +26,13 @@ namespace folly {
  * Given a map and a key, return the value corresponding to the key in the map,
  * or a given default value if the key doesn't exist in the map.
  */
-template <typename Map, typename Key>
-typename Map::mapped_type get_default(const Map& map, const Key& key) {
-  auto pos = map.find(key);
-  return (pos != map.end()) ? (pos->second) : (typename Map::mapped_type{});
-}
-template <
-    class Map,
-    typename Key = typename Map::key_type,
-    typename Value = typename Map::mapped_type,
-    typename std::enable_if<!is_invocable<Value>::value>::type* = nullptr>
-typename Map::mapped_type
-get_default(const Map& map, const Key& key, Value&& dflt) {
+template <class Map, typename Key = typename Map::key_type>
+typename Map::mapped_type get_default(
+    const Map& map,
+    const Key& key,
+    const typename Map::mapped_type& dflt = typename Map::mapped_type()) {
   auto pos = map.find(key);
-  if (pos != map.end()) {
-    return pos->second;
-  } else {
-    // if elision from function parameters was allowed, then we could make the
-    // third parameter a value parameter and just elide that into the return
-    // value, but sadly that is not allowed (yet)
-    return std::forward<Value>(dflt);
-  }
+  return (pos != map.end() ? pos->second : dflt);
 }
 
 /**
index 693f723..52e63e8 100644 (file)
@@ -16,7 +16,6 @@
 
 #include <folly/MapUtil.h>
 
-#include <cstddef>
 #include <map>
 #include <unordered_map>
 
@@ -239,7 +238,6 @@ struct GetRefDefaultPathCompiles<
         std::declval<int>(),
         std::declval<int>(),
         std::declval<T>()))>> : std::true_type {};
-
 } // namespace
 
 TEST(MapUtil, get_ref_default_path_temporary) {
@@ -248,41 +246,3 @@ TEST(MapUtil, get_ref_default_path_temporary) {
   EXPECT_FALSE(GetRefDefaultPathCompiles<const int&&>::value);
   EXPECT_FALSE(GetRefDefaultPathCompiles<int&&>::value);
 }
-
-namespace {
-
-class TestConstruction {
- public:
-  static std::size_t numberDefaultConstructs;
-  TestConstruction() {
-    ++numberDefaultConstructs;
-  }
-  TestConstruction(TestConstruction&&) = default;
-  TestConstruction(const TestConstruction&) = default;
-
-  TestConstruction& operator=(const TestConstruction&) = delete;
-  TestConstruction& operator=(TestConstruction&&) = delete;
-};
-
-std::size_t TestConstruction::numberDefaultConstructs = 0;
-
-} // namespace
-
-TEST(MapUtil, test_get_default_deferred_construction) {
-  auto map = std::unordered_map<int, TestConstruction>{};
-  map.insert({1, TestConstruction{}});
-
-  EXPECT_EQ(TestConstruction::numberDefaultConstructs, 1);
-
-  {
-    auto val = get_default(map, 1);
-    EXPECT_EQ(TestConstruction::numberDefaultConstructs, 1);
-    static_cast<void>(val);
-  }
-
-  {
-    auto val = get_default(map, 1, TestConstruction{});
-    EXPECT_EQ(TestConstruction::numberDefaultConstructs, 2);
-    static_cast<void>(val);
-  }
-}