From 743470c8f299419199c578efc80e405a8ec0e4d0 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sun, 19 Sep 2021 22:10:51 +0200 Subject: [PATCH] AK: Introduce ability to default-initialize a Variant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed that Variant is a somewhat common pattern while working on #10080, and this will simplify a few use-cases. :^) --- AK/Variant.h | 6 +++++- Tests/AK/TestVariant.cpp | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/AK/Variant.h b/AK/Variant.h index f757e2a3ac..dae5cd7272 100644 --- a/AK/Variant.h +++ b/AK/Variant.h @@ -210,7 +210,11 @@ public: template friend struct Variant; - Variant() = delete; + Variant() requires(!can_contain()) = delete; + Variant() requires(can_contain()) + : Variant(Empty()) + { + } #ifdef AK_HAS_CONDITIONALLY_TRIVIAL Variant(const Variant&) requires(!(IsCopyConstructible && ...)) = delete; diff --git a/Tests/AK/TestVariant.cpp b/Tests/AK/TestVariant.cpp index 8175b695da..f05c629022 100644 --- a/Tests/AK/TestVariant.cpp +++ b/Tests/AK/TestVariant.cpp @@ -219,3 +219,10 @@ TEST_CASE(copy_assign) EXPECT_EQ(the_value.get(), "Hello, world!"); } } + +TEST_CASE(default_empty) +{ + Variant my_variant; + EXPECT(my_variant.has()); + EXPECT(!my_variant.has()); +}