#define assert(E) \ if (!(E)) \ return 1; template class zero_init { public: zero_init() : val(static_cast(0)) { } zero_init(T val) : val(val) { } operator T&() { return val; } operator T() const { return val; } private: T val; }; int someFunc() { zero_init p; assert(p == 0); p = new int(7); assert(*p == 7); delete p; zero_init i; assert(i == 0); i = 7; assert(i == 7); switch (i) { } int* vp = new int[i]; delete[] vp; return 0; }