1 // N3323 2 3 #define assert(E) if(!(E))__builtin_abort(); 4 5 template<class T> 6 class zero_init 7 { 8 public: zero_init()9 zero_init( ) 10 : val( static_cast<T>(0) ) { } zero_init(T val)11 zero_init( T val ) : val( val ) 12 { } 13 operator T & ( ) { return val; } T()14 operator T ( ) const { return val; } 15 private: 16 T val; 17 }; 18 f()19void f() 20 { 21 zero_init<int*> p; assert( p == 0 ); 22 p = new int(7); 23 assert( *p == 7 ); 24 delete p; // error! 25 26 zero_init<int> i; assert( i == 0 ); 27 i = 7; 28 assert( i == 7 ); 29 switch( i ) { } // error! 30 31 int *vp = new int[i]; 32 } 33