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