| // { dg-do run } |
| |
| #include <assert.h> |
| |
| extern "C" int printf(const char *, ...); |
| |
| class Subscriptor |
| { |
| public: |
| |
| Subscriptor() |
| { counter = 1;} |
| |
| virtual ~Subscriptor() |
| { |
| counter--; |
| assert(counter == 0); |
| } |
| |
| private: |
| static int counter; |
| }; |
| |
| int Subscriptor::counter; |
| |
| template <typename number> |
| class Polynomial : public Subscriptor |
| { |
| }; |
| |
| class LagrangeEquidistant: public Polynomial<double> |
| { |
| }; |
| |
| template <int value> |
| class A |
| { |
| public: |
| class Nested: public LagrangeEquidistant |
| { |
| }; |
| A() { n = new Nested; } |
| ~A() { delete n; } |
| Subscriptor * n; |
| }; |
| |
| template<typename _Tp> |
| inline void |
| _MyDestroy(_Tp* __pointer) |
| { __pointer->~_Tp(); } |
| |
| int main() |
| { |
| Subscriptor * s1 = new LagrangeEquidistant; |
| _MyDestroy(s1); |
| A<1> * a1 = new A<1>; |
| _MyDestroy(a1); |
| A<2> * a2 = new A<2>; |
| _MyDestroy(a2); |
| |
| return 0; |
| } |