diff --git a/AK/Variant.h b/AK/Variant.h index b812b362af..17d81debec 100644 --- a/AK/Variant.h +++ b/AK/Variant.h @@ -430,7 +430,7 @@ public: decltype(auto) downcast() && { if constexpr (sizeof...(NewTs) == 1 && (IsSpecializationOf && ...)) { - return move(*this).template downcast_variant(); + return move(*this).downcast_variant(TypeWrapper {}); } else { Variant instance { Variant::invalid_index, Detail::VariantConstructTag {} }; visit([&](auto& value) { diff --git a/Tests/AK/TestVariant.cpp b/Tests/AK/TestVariant.cpp index d97f58019a..9ed2631961 100644 --- a/Tests/AK/TestVariant.cpp +++ b/Tests/AK/TestVariant.cpp @@ -132,6 +132,11 @@ TEST_CASE(as) EXPECT(one_integer_to_rule_them_all.has()); EXPECT_EQ(fake_integer.get(), 60); EXPECT_EQ(one_integer_to_rule_them_all.get(), 60); + + using OptionalFancyType = Variant; + auto definitely_fancy = OptionalFancyType { static_cast(12) }.downcast(); + EXPECT(definitely_fancy.has()); + EXPECT_EQ(definitely_fancy.get(), 12); } TEST_CASE(moved_from_state)