diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/p8018.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/p8018.C | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8018.C b/gcc/testsuite/g++.old-deja/g++.mike/p8018.C deleted file mode 100644 index 37035bcd591..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.mike/p8018.C +++ /dev/null @@ -1,85 +0,0 @@ -// prms-id: 8018 - -class RefCount { -private: - int nref; - -public: - RefCount() : nref(0) {} - ~RefCount() {} - - int nrefs() const { return nref; } - int reference() { - nref++; - return nref; - } - int unreference() { - nref--; - return nref; - } -}; - -class A : public RefCount { -public: - A() {} - ~A() {} -}; - -class RefA { -private: - A *p; - - void clear() { - if (p) { - p->unreference(); - if (!p->nrefs()) - delete p; - } - } - -public: - RefA(A* a) : p(a) { if (p) p->reference(); } - RefA(const RefA& a) : p(a.p) { if (p) p->reference(); } - ~RefA() { clear(); } - - A* operator->() { return p; } - - RefA& operator=(const RefA& a) { - clear(); - p=a.p; - if (p) - p->reference(); - return *this; - } - - RefA& operator=(A* a) { - clear(); - p=a; - if (p) - p->reference(); - return *this; - } -}; - -class AccRefA { -private: - RefA a; - -public: - AccRefA(A* ap) : a(ap) {} - AccRefA(const RefA& ar) : a(ar) {} - ~AccRefA() {} - - operator RefA&() { return a; } - RefA& result() { return a; } -}; - -int -main() { - RefA a1 = new A; - AccRefA aa1(a1); - RefA a3 = aa1; - - if (a1->nrefs() != 3) - return 1; -} |