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;
...
};