1 // { dg-do run } 2 // prms-id: 658 3 4 #include <iostream> 5 #include <cstdlib> 6 7 /* We may not find the libg++ <bool.h>. */ 8 #ifndef FALSE 9 #define FALSE false 10 #endif 11 #ifndef TRUE 12 #define TRUE true 13 #endif 14 15 // The VxWorks headers define a macro named "OK", which is not 16 // ISO-compliant, but is part of the VxWorks API. 17 #if defined __vxworks 18 #undef OK 19 #endif 20 21 class Object { 22 public: 23 Object(); 24 Object(const Object&); 25 ~Object(); 26 27 void OK() const; 28 private: 29 bool _destructed; 30 }; 31 32 class Char: public Object { 33 public: 34 Char(); 35 Char(char); 36 Char(const Char&); 37 ~Char(); 38 39 operator char () const; 40 private: 41 char _c; 42 }; 43 main()44int main() 45 { 46 Char r, s; 47 48 r = Char('r'); 49 s = Char('s'); 50 } 51 52 // 53 // Object stuff 54 // Object()55Object::Object(): 56 _destructed(FALSE) 57 {} 58 Object(const Object & other)59Object::Object(const Object& other): 60 _destructed(FALSE) 61 { 62 other.OK(); 63 } 64 ~Object()65Object::~Object() 66 { 67 OK(); 68 _destructed = TRUE; 69 } 70 71 void OK()72Object::OK() const 73 { 74 if (_destructed) { 75 std::cerr << "FAILURE - reference was made to a destructed object\n"; 76 std::abort(); 77 } 78 } 79 80 // 81 // Char stuff 82 // 83 Char()84Char::Char(): 85 Object(), 86 _c('a') 87 { } 88 Char(char c)89Char::Char(char c): 90 Object(), 91 _c(c) 92 { } 93 Char(const Char & other)94Char::Char(const Char& other): 95 Object(other), 96 _c(other._c) 97 { } 98 ~Char()99Char::~Char() 100 { 101 OK(); 102 } 103 104 Char::operator char () const 105 { 106 return _c; 107 } 108 109 110