aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.mike/p8018.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/p8018.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p8018.C85
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;
-}