1 struct X { 2 int v; 3 typedef int t; 4 }; 5 6 struct YA { 7 int value; 8 typedef int type; 9 }; 10 11 template<typename T> struct C : X, T { 12 using T::value; 13 using typename T::type; 14 using X::v; 15 using typename X::t; 16 }; 17 18 template<typename T> struct D : X, T { 19 using T::value; 20 using typename T::type; 21 using X::v; 22 using typename X::t; 23 }; 24 25 template<typename T> struct E : X, T { 26 using T::value; 27 using typename T::type; 28 using X::v; 29 using typename X::t; 30 }; 31 32 template<typename T> struct F : X, T { 33 using T::value; 34 using typename T::type; 35 using X::v; 36 using typename X::t; 37 }; 38 39 // Force instantiation. 40 typedef C<YA>::type I; 41 typedef D<YA>::type I; 42 typedef E<YA>::type I; 43 typedef F<YA>::type I; 44