From fbf58139f735ca9fb5a7e933204234c374f7fb47 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk <41349689+antkmsft@users.noreply.github.com> Date: Tue, 28 Nov 2023 00:10:52 -0800 Subject: [PATCH] Nullable::Emplace() to set HasValue() (#5178) Co-authored-by: Anton Kolesnyk --- sdk/core/azure-core/CHANGELOG.md | 1 + .../azure-core/inc/azure/core/nullable.hpp | 1 + sdk/core/azure-core/test/ut/nullable_test.cpp | 28 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md index 1fb18874e..be3b2d465 100644 --- a/sdk/core/azure-core/CHANGELOG.md +++ b/sdk/core/azure-core/CHANGELOG.md @@ -8,6 +8,7 @@ ### Bugs Fixed +- [[#5172]](https://github.com/Azure/azure-sdk-for-cpp/issues/5172) `Azure::Nullable::Emplace()` does not set `HasValue()` to `true`. - [[#5130]](https://github.com/Azure/azure-sdk-for-cpp/issues/5130) `Url::AppendPath()` and `Url::SetPath()` may end up with a double slash at the beginning of a path. ### Other Changes diff --git a/sdk/core/azure-core/inc/azure/core/nullable.hpp b/sdk/core/azure-core/inc/azure/core/nullable.hpp index 13584e8b9..5111d8aa8 100644 --- a/sdk/core/azure-core/inc/azure/core/nullable.hpp +++ b/sdk/core/azure-core/inc/azure/core/nullable.hpp @@ -218,6 +218,7 @@ public: { Reset(); ::new (static_cast(&m_value)) T(std::forward(Args)...); + m_hasValue = true; return m_value; } diff --git a/sdk/core/azure-core/test/ut/nullable_test.cpp b/sdk/core/azure-core/test/ut/nullable_test.cpp index 16911c6b6..b25ec791f 100644 --- a/sdk/core/azure-core/test/ut/nullable_test.cpp +++ b/sdk/core/azure-core/test/ut/nullable_test.cpp @@ -99,6 +99,34 @@ TEST(Nullable, ValueAssignment) EXPECT_FALSE(strVal.HasValue()); } +TEST(Nullable, Emplace) +{ + { + Azure::Nullable x; + EXPECT_FALSE(x.HasValue()); + EXPECT_EQ(x.Emplace(42), 42); + EXPECT_TRUE(x.HasValue()); + EXPECT_EQ(x.Value(), 42); + } + + { + Azure::Nullable y; + EXPECT_FALSE(y.HasValue()); + EXPECT_EQ(y.Emplace(), 0); + EXPECT_TRUE(y.HasValue()); + EXPECT_EQ(y.Value(), 0); + } + + { + Azure::Nullable z = 42; + EXPECT_TRUE(z.HasValue()); + EXPECT_EQ(z.Value(), 42); + EXPECT_EQ(z.Emplace(), 0); + EXPECT_TRUE(z.HasValue()); + EXPECT_EQ(z.Value(), 0); + } +} + TEST(Nullable, Swap) { Nullable val1;