/* { dg-do compile } */ bool foo0(int) { return true; } bool foo1(); struct A { A(); ~A(); template void bar1(T f) { if (f(0)) foo1(); } template void bar2(T); }; template void A::bar2(T f) { A a, b[1], *p; while (foo1()) { if (p) ++p; if (p && foo1()) bar1(f); if (p) ++p; } if (foo1()) bar1(f); } void baz() { A().bar2(foo0); }