// Compile-time selection (lazy referencing of template members)
// reference T::result only
template <bool b , typename T , typename F>
struct If
{
typedef typename T::result result;
};
// reference F::result only
template <typename T , typename F>
struct If <false , T , F>
{
typedef typename F::result result;
};
If < false ,
A<T1>,
B<T1> >::result foo;