1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 02:57:42 +00:00

AK: Specialize TypeList for Variant types

This allows callers to use the following semantics:

    using MyVariant = Variant<Empty, int>;

    template<typename T>
    size_t size() { return TypeList<T>::size; }

    auto s = size<MyVariant>();

This will be needed for an upcoming IPC change, which will result in us
knowing the Variant type, but not the underlying variadic types that the
Variant holds.
This commit is contained in:
Timothy Flynn 2022-12-23 09:18:15 -05:00 committed by Andreas Kling
parent 4fec9540ec
commit d2a304ae87
2 changed files with 17 additions and 1 deletions

View file

@ -260,3 +260,16 @@ TEST_CASE(default_empty)
EXPECT(my_variant.has<Empty>());
EXPECT(!my_variant.has<int>());
}
TEST_CASE(type_list_specialization)
{
EXPECT_EQ((TypeList<Variant<Empty>>::size), 1u);
EXPECT_EQ((TypeList<Variant<Empty, int>>::size), 2u);
EXPECT_EQ((TypeList<Variant<Empty, int, String>>::size), 3u);
using MyVariant = Variant<Empty, int, String>;
using MyList = TypeList<MyVariant>;
EXPECT((IsSame<typename MyList::template Type<0>, Empty>));
EXPECT((IsSame<typename MyList::template Type<1>, int>));
EXPECT((IsSame<typename MyList::template Type<2>, String>));
}