AK: Introduce ability to default-initialize a Variant

I noticed that Variant<Empty, …> is a somewhat common pattern while
working on #10080, and this will simplify a few use-cases. :^)
This commit is contained in:
Ben Wiederhake 2021-09-19 22:10:51 +02:00 committed by Ali Mohammad Pur
parent f261b68408
commit 743470c8f2
Notes: sideshowbarker 2024-07-18 03:36:04 +09:00
2 changed files with 12 additions and 1 deletions

View File

@ -210,7 +210,11 @@ public:
template<typename... NewTs>
friend struct Variant;
Variant() = delete;
Variant() requires(!can_contain<Empty>()) = delete;
Variant() requires(can_contain<Empty>())
: Variant(Empty())
{
}
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
Variant(const Variant&) requires(!(IsCopyConstructible<Ts> && ...)) = delete;

View File

@ -219,3 +219,10 @@ TEST_CASE(copy_assign)
EXPECT_EQ(the_value.get<String>(), "Hello, world!");
}
}
TEST_CASE(default_empty)
{
Variant<Empty, int> my_variant;
EXPECT(my_variant.has<Empty>());
EXPECT(!my_variant.has<int>());
}