1/* { dg-do compile } */ 2bool foo0(int) { return true; } 3 4bool foo1(); 5 6struct A 7{ 8 A(); 9 ~A(); 10 11 template<typename T> void bar1(T f) 12 { 13 if (f(0)) 14 foo1(); 15 } 16 17 template<typename T> void bar2(T); 18}; 19 20template<typename T> void A::bar2(T f) 21{ 22 A a, b[1], *p; 23 24 while (foo1()) 25 { 26 if (p) 27 ++p; 28 if (p && foo1()) 29 bar1(f); 30 if (p) 31 ++p; 32 } 33 34 if (foo1()) 35 bar1(f); 36} 37 38void baz() 39{ 40 A().bar2(foo0); 41} 42