// { dg-do run }
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
// DR193: Order of destruction of local automatics of destructor 

extern "C" void abort(void);

namespace N1 {
  bool a_done = false;
  struct A
  { 
    ~A()
    {
      a_done = true;
    }
  };

  struct B
  { 
    ~B()
    {
      if (!a_done)
        abort();
    }
  };

  struct C {
    B x;
    ~C() {
      A y;
    }
  };
}


namespace N2 {
  bool a_done = false;

  template <class>
  struct A
  { 
    ~A()
    {
      a_done = true;
    }
  };

  template <class>
  struct B
  { 
    ~B()
    {
      if (!a_done)
        abort();
    }
  };

  template <class T>
  struct C {
    B<T> x;
    ~C() {
      A<T> y;
    }
  };
}


int main(void)
{
  N1::C c1;
  N2::C<void> c2;
  return 0;
}
