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()24 int 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