/* { dg-do compile } */ /* { dg-options "-std=c++11 -O2" } */ class A { public: void getValueType () { } void getTypeClass (); }; template class B { public: void Visit (A *p1) { p1->getTypeClass (); static_cast (0)->VisitAtomicType (0); } }; class C : B { template void dumpChild (Fn p1) { p1 (); } public: void dumpTypeAsChild (int); void VisitAtomicType (A *p1) { p1->getValueType (); dumpTypeAsChild (0); } }; void C::dumpTypeAsChild (int) { dumpChild ([=] { Visit (0); }); }