12#include <catch2/catch.hpp>
26 struct Here1 : Tag1{};
27 struct Here2 : Tag2{};
28 static_assert(std::is_same_v<List<void>,
30 static_assert(std::is_same_v<List<char>,
39 struct Here1 : Tag1{};
40 struct Here2 : Tag2{};
41 static_assert(std::is_same_v<List<void, const volatile int&>,
43 static_assert(std::is_same_v<List<char, long>,
52 struct Here1 : Tag1{};
53 struct Here2 : Tag2{};
54 static_assert(std::is_same_v<List<void, const volatile int&>,
56 static_assert(std::is_same_v<List<char, long>,
Make a list of all distinct types so far mentioned in calls of a certain macro.
#define BEGIN_TYPE_ENUMERATION(Tag)
#define ENUMERATE_TYPE(Tag, T)
This macro must occur at file scope, not within any other namespace.
TEST_CASE("Using different tags")
typename Accumulate< 0 >::type type
Utilities for compile-time type manipulation. Some terminology as in Lisp.