xref: /llvm-project/lldb/test/API/lang/cpp/crtp/main.cpp (revision 4019699fa5fd153586f02fd7f6b7cfc51a688bf2)
1*4019699fSRaphael Isemann template <typename T> struct Base {
BaseBase2*4019699fSRaphael Isemann   Base(T &t) : ref(t), pointer(&t) {}
3*4019699fSRaphael Isemann   // Try referencing `Derived` via different ways to potentially make LLDB
4*4019699fSRaphael Isemann   // pull in the definition (which would recurse back to this base class).
5*4019699fSRaphael Isemann   T &ref;
6*4019699fSRaphael Isemann   T *pointer;
funcBase7*4019699fSRaphael Isemann   T func() { return ref; }
8*4019699fSRaphael Isemann };
9*4019699fSRaphael Isemann 
10*4019699fSRaphael Isemann struct Derived : Base<Derived> {
DerivedDerived11*4019699fSRaphael Isemann   Derived() : Base<Derived>(*this) {}
12*4019699fSRaphael Isemann   int member = 0;
13*4019699fSRaphael Isemann };
14*4019699fSRaphael Isemann 
15*4019699fSRaphael Isemann Derived derived;
16*4019699fSRaphael Isemann 
main()17*4019699fSRaphael Isemann int main() { return derived.member; }
18