diff options
-rw-r--r-- | src/list/list.h | 8 | ||||
-rw-r--r-- | src/type.h | 3 | ||||
-rw-r--r-- | test.cc | 18 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/list/list.h b/src/list/list.h index c03a0ef..66394fc 100644 --- a/src/list/list.h +++ b/src/list/list.h @@ -21,6 +21,14 @@ struct List<Head> { typedef Cons<Head, void> type; }; +template < + typename Type, + Type... Values +> +using ListOfType = List< + std::integral_constant<Type, Values>... +>; + template <typename Cons> using Head = Car<Cons>; @@ -14,6 +14,9 @@ using Size = std::integral_constant<std::size_t, Value>; template <bool Value> using Boolean = std::integral_constant<bool, Value>; +template <char Value> +using Char = std::integral_constant<char, Value>; + template < typename X, typename Y @@ -239,6 +239,24 @@ static_assert( "(list 1 2) != (cons 1 (cons 2 void))" ); +// list of type + +static_assert( + std::is_same< + tav::Cons<tav::Int<1>, void>, + tav::ListOfType<int, 1>::type + >::value, + "(list 1) != (cons 1 void)" +); + +static_assert( + std::is_same< + tav::Cons<tav::Int<1>, tav::Cons<tav::Int<2>, void>>, + tav::ListOfType<int, 1, 2>::type + >::value, + "(list 1 2) != (cons 1 (cons 2 void))" +); + // list length static_assert( |