diff options
author | Timothy Flynn <trflynn89@pm.me> | 2022-12-23 09:18:15 -0500 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-12-26 09:36:16 +0100 |
commit | d2a304ae87bd89bb0d3c99d0d04dff976b7d7f98 (patch) | |
tree | 7a57f2e88e99266c854f1b60663b5404ecd726a0 /Tests/AK | |
parent | 4fec9540ec865a52070770a3a872e1fa7cc8ccc6 (diff) | |
download | serenity-d2a304ae87bd89bb0d3c99d0d04dff976b7d7f98.zip |
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.
Diffstat (limited to 'Tests/AK')
-rw-r--r-- | Tests/AK/TestVariant.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Tests/AK/TestVariant.cpp b/Tests/AK/TestVariant.cpp index 37bbf646cd..88a3e5fb7d 100644 --- a/Tests/AK/TestVariant.cpp +++ b/Tests/AK/TestVariant.cpp @@ -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>)); +} |