// Bug: g++ was failing to destroy C::a because it was using two // different sentry variables for construction and destruction. extern "C" void _exit (int); int r = 1; struct A { void f(){}; A(){ ++r; } ~A(){ r -= 2; _exit (r); } }; template struct C { C(){ a.f(); } static A a; }; template A C::a; typedef C B; int main() { C c; return r; }