1 From d2e73f1115bfed906f2a10dc69aebced6774bac3 Mon Sep 17 00:00:00 2001 2 From: tzik <tzik (a] chromium.org> 3 Date: Wed, 17 Oct 2018 12:38:46 +0000 4 Subject: [PATCH] Use qualified base::make_optional in optional_unittest.cc 5 6 Unqualified usage of make_optional causes a compile error if: 7 - It's compiler in C++17 mode and <optional> is included. 8 - The parameter of make_optional is in std namespace, such as 9 std::string. 10 As std::make_optional is pulled by ADL rule and conflicts to 11 base::make_optional in this situation. 12 13 This CL replaces them with qualified base::make_optional, and 14 replaces others for consistency. 15 16 Change-Id: I2045e9eac0e4466dce266112eab5bf7c8555c2ef 17 Reviewed-on: https://chromium-review.googlesource.com/c/1282512 18 Reviewed-by: Daniel Cheng <dcheng (a] chromium.org> 19 Reviewed-by: Hidehiko Abe <hidehiko (a] chromium.org> 20 Commit-Queue: Taiju Tsuiki <tzik (a] chromium.org> 21 Cr-Commit-Position: refs/heads/master@{#600361} 22 --- 23 base/optional_unittest.cc | 25 +++++++++++++++---------- 24 1 file changed, 15 insertions(+), 10 deletions(-) 25 26 diff --git a/base/optional_unittest.cc b/base/optional_unittest.cc 27 index 7bdb46b76173..365e99da41df 100644 28 --- a/base/optional_unittest.cc 29 +++ b/base/optional_unittest.cc 30 @@ -1899,34 +1899,39 @@ TEST(OptionalTest, NotEqualsNull) { 31 32 TEST(OptionalTest, MakeOptional) { 33 { 34 - Optional<float> o = make_optional(32.f); 35 + // Use qualified base::make_optional here and elsewhere to avoid the name 36 + // confliction to std::make_optional. 37 + // The name conflict happens only for types in std namespace, such as 38 + // std::string. The other qualified base::make_optional usages are just for 39 + // consistency. 40 + Optional<float> o = base::make_optional(32.f); 41 EXPECT_TRUE(o); 42 EXPECT_EQ(32.f, *o); 43 44 float value = 3.f; 45 - o = make_optional(std::move(value)); 46 + o = base::make_optional(std::move(value)); 47 EXPECT_TRUE(o); 48 EXPECT_EQ(3.f, *o); 49 } 50 51 { 52 - Optional<std::string> o = make_optional(std::string("foo")); 53 + Optional<std::string> o = base::make_optional(std::string("foo")); 54 EXPECT_TRUE(o); 55 EXPECT_EQ("foo", *o); 56 57 std::string value = "bar"; 58 - o = make_optional(std::move(value)); 59 + o = base::make_optional(std::move(value)); 60 EXPECT_TRUE(o); 61 EXPECT_EQ(std::string("bar"), *o); 62 } 63 64 { 65 - Optional<TestObject> o = make_optional(TestObject(3, 0.1)); 66 + Optional<TestObject> o = base::make_optional(TestObject(3, 0.1)); 67 EXPECT_TRUE(!!o); 68 EXPECT_TRUE(TestObject(3, 0.1) == *o); 69 70 TestObject value = TestObject(0, 0.42); 71 - o = make_optional(std::move(value)); 72 + o = base::make_optional(std::move(value)); 73 EXPECT_TRUE(!!o); 74 EXPECT_TRUE(TestObject(0, 0.42) == *o); 75 EXPECT_EQ(TestObject::State::MOVED_FROM, value.state()); 76 @@ -1945,7 +1950,7 @@ TEST(OptionalTest, MakeOptional) { 77 bool c; 78 }; 79 80 - Optional<Test> o = make_optional<Test>(1, 2.0, true); 81 + Optional<Test> o = base::make_optional<Test>(1, 2.0, true); 82 EXPECT_TRUE(!!o); 83 EXPECT_EQ(1, o->a); 84 EXPECT_EQ(2.0, o->b); 85 @@ -1953,11 +1958,11 @@ TEST(OptionalTest, MakeOptional) { 86 } 87 88 { 89 - auto str1 = make_optional<std::string>({'1', '2', '3'}); 90 + auto str1 = base::make_optional<std::string>({'1', '2', '3'}); 91 EXPECT_EQ("123", *str1); 92 93 - auto str2 = 94 - make_optional<std::string>({'a', 'b', 'c'}, std::allocator<char>()); 95 + auto str2 = base::make_optional<std::string>({'a', 'b', 'c'}, 96 + std::allocator<char>()); 97 EXPECT_EQ("abc", *str2); 98 } 99 } 100 -- 101 2.20.0.405.gbc1bbc6f85-goog 102 103