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