#include #include "type.h" #include "operation/math.h" #include "list/list.h" #include "list/operation/higher/filter.h" #include "list/generator/iota.h" #include "runtime/list/for_each.h" using candidates = tav::Iota, tav::Int<2>, tav::Int<1>>::type; template < typename Candidate, typename Base > using isMultipleOf = tav::EqualValue< tav::Modulo, tav::Int<0> >; template < typename Candidates, typename Base > using removeMultiplesOf = tav::Remove< tav::Apply::template single_type, Candidates >; template struct Sieve { typedef typename tav::Cons< tav::Head, typename Sieve< typename removeMultiplesOf< tav::Tail, tav::Head >::type >::type >::type type; }; template <> struct Sieve { typedef void type; }; using primes = Sieve::type; int main(int, char **) { tav::runtime::for_each([](const int x) { std::cout << x << std::endl; }); }