template< typename T1
, typename T2
, bool CHOOSE_FIRST_TYPE
>
struct select_first_type
{
typedef T1 type; // The first type
};
template< typename T1
, typename T2
>
struct select_first_type<T1, T2, false>
{
typedef T2 type; // The second type
};