struct X { int v; typedef int t; }; struct YA { int value; typedef int type; }; template<typename T> struct C : X, T { using T::value; using typename T::type; using X::v; using typename X::t; }; template<typename T> struct D : X, T { using T::value; using typename T::type; using X::v; using typename X::t; }; template<typename T> struct E : X, T { using T::value; using typename T::type; using X::v; using typename X::t; }; template<typename T> struct F : X, T { using T::value; using typename T::type; using X::v; using typename X::t; }; // Force instantiation. typedef C<YA>::type I; typedef D<YA>::type I; typedef E<YA>::type I; typedef F<YA>::type I;