diff options
-rw-r--r-- | src/function/apply.h | 12 | ||||
-rw-r--r-- | test.cc | 14 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/function/apply.h b/src/function/apply.h index d353169..6012a01 100644 --- a/src/function/apply.h +++ b/src/function/apply.h @@ -48,15 +48,21 @@ struct Apply { typedef typename tav::List<Arguments...>::type argument_list; template <typename... Partials> - using type = Function< + using variadic_type = Function< typename detail::resolve_placeholder< typename tav::List<Partials...>::type, Arguments >::type... >; - template <typename Partials> - using single_type = type<Partials>; + template <typename Partial> + using single_type = variadic_type<Partial>; + + template <typename Partial0, typename Partial1> + using pair_type = variadic_type<Partial0, Partial1>; + + template <typename Partial0, typename Partial1, typename Partial2> + using triple_type = variadic_type<Partial0, Partial1, Partial2>; }; } @@ -639,7 +639,13 @@ static_assert( static_assert( std::is_same< tav::Int<42>, - tav::Apply<tav::Multiply, tav::Int<21>, tav::_0>::type<tav::Int<2>>::type + tav::Apply< + tav::Multiply, + tav::Int<21>, + tav::_0 + >::single_type< + tav::Int<2> + >::type >::value, "((lambda (x) (* 21 x)) 2) != 42" ); @@ -648,7 +654,11 @@ static_assert( std::is_same< tav::List<tav::Int<10>, tav::Int<12>, tav::Int<14>>::type, tav::Map< - tav::Apply<tav::Add, tav::_0, tav::Int<10>>::single_type, + tav::Apply< + tav::Add, + tav::_0, + tav::Int<10> + >::single_type, tav::List<tav::Int<0>, tav::Int<2>, tav::Int<4>>::type >::type >::value, |