Example 4: Type Selection consists of a primary template and a partial specialization.
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 };