Listing 6: cross_product.

template <class Table1, class Table2>
  class cross_product_iterator {...};
template <class Table1, class Table2> class cross_product_t
{
public:
  typedef typename concat<
    typename Table1::field_list,
    typename Table2::field_list>::result field_list;
  typedef tuple<field_list> value_type;
  typedef select<
    Table1::is_distinct,
    concat<
      typename Table1::sort_list,
      typename Table2::sort_list>::result,
    typename Table1::sort_list
    >::result sort_list;
  ...
};