(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
eh/
ref-temp1.C
// PR c++/53868
// { dg-do run { target c++11 } }

#if __cplusplus > 201100L
#define THROWING noexcept(false)
#else
#define THROWING
#endif

extern "C" int printf(const char *, ...);
extern "C" void abort();

struct SubobjectInA {
   SubobjectInA();
   ~SubobjectInA();
};

int a;
struct A : SubobjectInA {
   A() = delete;
   A(const A &) = delete;
  A(A &&) = delete;
   A(int);
   ~A();
};

#ifdef DEBUG
#define TRACE_FUNC( ... ) \
{   printf("%s\n", __PRETTY_FUNCTION__); __VA_ARGS__   }
#else
#define TRACE_FUNC( ... ) \
{   __VA_ARGS__   }
#endif

struct Q {
   Q() : q(0)  TRACE_FUNC()
   ~Q() THROWING;
   int q;
};

int main() {
   try { const A &a = Q().q; }
   catch (...) { if (!a) return 0; }
   abort();
}

SubobjectInA::SubobjectInA()  TRACE_FUNC()
SubobjectInA::~SubobjectInA()  TRACE_FUNC()
A::A(int)  TRACE_FUNC(++a;)
A::~A()  TRACE_FUNC(--a;)
Q::~Q() THROWING TRACE_FUNC( throw 0; )