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