Viewing file: pr82352.C (1.1 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR ipa/82352 // { dg-do compile } // { dg-options "-O2" }
typedef __SIZE_TYPE__ size_t;
class A { public : typedef enum { Zero = 0, One = 1 } tA; A(tA a) { m_a = a; }
private : tA m_a; };
class B { public : void *operator new(size_t); };
class C { public: virtual void ffff () = 0; };
class D { public : virtual void g() = 0; virtual void h() = 0; };
template<class T> class IIII: public T, public D { public: void ffff() { if (!m_i2) throw A(A::One); };
void h() { if (m_i2) throw A(A::Zero); }
protected: virtual void g() { if (m_i1 !=0) throw A(A::Zero); };
private : int m_i1; void *m_i2; };
class E { private: size_t m_e; static const size_t Max;
public: E& i(size_t a, size_t b, size_t c) { if ((a > Max) || (c > Max)) throw A(A::Zero ); if (a + b > m_e) throw A(A::One ); return (*this); }
inline E& j(const E &s) { return i(0,0,s.m_e); } };
class F : public C { }; class G : public C { }; class HHHH : public B, public F, public G { };
void k() { new IIII<HHHH>(); }
void l() { E e1, e2; e1.j(e2); }
|