Listing 2: run_for_each.

template <class List, class Func> class for_each_type;
template <class List_, class Func_> class for_each_type_
{
  static void run_helper_(
    Func_ f, void(Func_::*)(typename List_::head*))
  {
    f((typename List_::head*)0);
    for_each_type<typename List_::tail, Func_>::run(f);
  }
  static void run_helper_(
    Func_ f, bool(Func_::*)(typename List_::head*))
  {
    if (f((typename List_::head*)0))
      for_each_type<typename List_::tail, Func_>::run(f);
  }
  static void run(Func_ f)
  {
    run_helper_(f, &Func_::operator());
  }
  friend class for_each_type<List_, Func_>;
};
template <class List, class Func> class for_each_type
{
  struct stop
  {
    static void run(Func) {}
  };
  typedef select<
    boost::is_same<List, null_type>::value, stop,
    for_each_type_<List, Func> >::result result_;
public:
  static void run(Func f)
  {
    result_::run(f);
  }
};
template <class List, class Func>
void run_for_each(Func f, List* = 0)
{
  for_each_type<List, Func>::run(f);
}