1 /* { dg-do compile } */ 2 /* { dg-options "-O -Wuninitialized" } */ 3 S8S84struct S8 { template<typename T> S8(T) { } }; 5 6 template<typename T> struct S10; 7 template<typename T> struct S10<T()> { typedef T S12; typedef S8 S1(); }; 8 9 template<typename T> struct S3 { }; 10 template<typename T> struct S11 { S11(S3<T>); }; 11 12 struct S2 13 { 14 template<typename T> operator S11<T>() { return S11<T>(S5<T>()); } 15 template<typename T> struct S5:public S3<T> 16 { 17 virtual typename S10<T>::S12 S13() { 18 return 0; 19 } 20 }; 21 }; 22 23 template<typename T> S11<T> S6(S3<T>) { return S11<T>(S3<T>()); } 24 template<typename S12> struct S7 { typedef S12 S15(); }; 25 26 struct S4 27 { 28 template<typename T> operator S11<T>() 29 { 30 struct S14:public S3<T> 31 { 32 S14(S2 x):S11_(x) { } 33 S11<typename S7<typename S10<T>::S12>::S15> S11_; 34 }; 35 return S6(S14(S11_)); 36 } 37 S2 S11_; 38 }; 39 40 struct S9 41 { 42 template<typename F> operator S11<F>() { return S11<F>(S14<F>(S11_)); } 43 template<typename F> struct S14:public S3<F> 44 { 45 S14(S4 x):S11_(x) { } 46 S11<typename S10<F>::S1> S11_; 47 }; 48 S4 S11_; 49 }; 50 51 void S15(S11<void()>); 52 void S16() { S9 x; S15(x); } 53 54