1 #define assert(E) \ 2 if (!(E)) \ 3 return 1; 4 5 template <class T> 6 class zero_init 7 { 8 public: zero_init()9 zero_init() 10 : val(static_cast<T>(0)) 11 { 12 } zero_init(T val)13 zero_init(T val) 14 : val(val) 15 { 16 } operator T&()17 operator T&() { return val; } operator T() const18 operator T() const { return val; } 19 20 private: 21 T val; 22 }; 23 someFunc()24int someFunc() 25 { 26 zero_init<int*> p; 27 assert(p == 0); 28 p = new int(7); 29 assert(*p == 7); 30 delete p; 31 32 zero_init<int> i; 33 assert(i == 0); 34 i = 7; 35 assert(i == 7); 36 switch (i) { 37 } 38 39 int* vp = new int[i]; 40 delete[] vp; 41 42 return 0; 43 } 44