From 349390672525fdd344ebe612185c44993c35b6a5 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Thu, 18 Dec 1997 13:06:20 +0000 Subject: [PATCH] *** empty log message *** From-SVN: r17129 --- .../g++.old-deja/g++.benjamin/p13721.C | 21 +++ .../g++.old-deja/g++.benjamin/tem01.C | 140 ++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C create mode 100644 gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C b/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C new file mode 100644 index 00000000000..be1df799082 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.benjamin/p13721.C @@ -0,0 +1,21 @@ +// Build don't link: +// prms-id: 13721 + +class A +{ + public : + int a; +}; +class B : public A +{ + public : + void cmp(int a, int b) {} + B(int a = 0) + { + cmp(A::a, a); //should not give warning + } +}; +int main(void) +{ + return(1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C b/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C new file mode 100644 index 00000000000..b8b546dc6fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.benjamin/tem01.C @@ -0,0 +1,140 @@ +// Build don't link: +// prms-id: 13911 + + + + + +template +class ref_counter { +public: + ref_counter() : p_refcnt(new unsigned int(N)) {} + ref_counter(const ref_counter& x) : p_refcnt(x.p_refcnt) { + ++*p_refcnt; + } + ref_counter& operator=(const ref_counter& rhs) { + ++*rhs.p_refcnt; + decrement(); + p_refcnt = rhs.p_refcnt; + return *this; + } + ~ref_counter() {decrement();} + + bool unique() const {return *p_refcnt == N;} + +private: + unsigned int* p_refcnt; + void decrement() { + if (unique()) delete p_refcnt; + else --*p_refcnt; + } +}; + +template +class ref_pointer { +public: + + ref_pointer() : the_p(0) {} + ref_pointer(T* just_newed) : the_p(just_newed) {} + virtual ~ref_pointer() {if (unique()) delete the_p;} +protected: + ref_pointer::ref_pointer(T* the_p_arg, ref_counter& ref_count_arg) + : the_p(the_p_arg), ref_count(ref_count_arg) {} + +public: + + ref_pointer& operator=(const ref_pointer&); + ref_pointer& operator=(T*); + operator const T*() const {return the_p;} + T* operator()() {return the_p;} + T* operator()() const {return the_p;} + T& operator*() const {return *the_p;} + friend bool operator==(const ref_pointer& lhs, + const ref_pointer& rhs) { + return lhs.the_p == rhs.the_p; + } + friend bool operator!=(const ref_pointer& lhs, + const ref_pointer& rhs) { + return lhs.the_p != rhs.the_p; + } + + + bool unique() const {return ref_count.unique();} + bool isNull() const {return the_p==0;} + +protected: + ref_counter& refCount() {return ref_count;} + +private: + + ref_counter ref_count; + T* the_p; +}; + +template +ref_pointer& ref_pointer::operator=(const ref_pointer& rhs) { + if (the_p != rhs.the_p) { + if (unique()) delete the_p; + the_p = rhs.the_p; + ref_count = rhs.ref_count; + } + return *this; +} + + +template +ref_pointer& ref_pointer::operator=(T* just_newed) { + if (unique()) delete the_p; + the_p = just_newed; + ref_count = ref_counter(); + return *this; +} + + + +template +class CountedObjPtr : public ref_pointer { +public: + CountedObjPtr() {} + CountedObjPtr(T* just_newed) : ref_pointer(just_newed) {} + CountedObjPtr(T* the_p_arg, ref_counter<1>& ref_count_arg) + : ref_pointer(the_p_arg, ref_count_arg) {} + CountedObjPtr& operator=(T* rhs) { + ref_pointer::operator=(rhs); + return *this; + } + CountedObjPtr& operator=(const CountedObjPtr& rhs) { + ref_pointer::operator=(rhs); + return *this; + } + T* operator->() const {return (*this)();} + +}; + + + + + +//instantiating type + +class TSObservable; + +class TSObserver { +public: + + enum TSType { NormalTS, UpYldCrvTS, DownYldCrvTS, ZeroVolTS }; + + virtual ~TSObserver() {} + + virtual void update(TSObservable* theChangedObservable) = 0; + virtual TSType key() const { return myKey; } + virtual TSType& key() { return myKey; } +protected: + TSObserver(TSType myKeyArg) : myKey(myKeyArg) {} + TSType myKey; +}; + + + +//now try to instantiate +template class CountedObjPtr;