// bindgen-flags: -- -std=c++14 // Issue #2078. To pick up the definition of `ClassCInnerA`, // `ty.canonical_type().declaration().definition()` is needed. template class ClassA { public: class ClassAInner { public: T *x; }; }; template class ClassB { public: void foo() { ((D *)0)->quux(); } }; template class ClassC { struct ClassCInnerA; struct ClassCInnerB { ClassCInnerA *cache; }; static_assert(sizeof(ClassCInnerB) > 0, ""); struct ClassCInnerA { ClassCInnerB *member; }; public: class ClassCInnerCRTP : public ClassB::ClassAInner> { public: void quux() { ((typename ClassA::ClassAInner *)0)->x->member; } }; }; class ClassD : public ClassB::ClassCInnerCRTP> { public: void bar() { ((ClassC::ClassCInnerCRTP *)0)->foo(); } };