111
|
1 // N3323
|
|
2
|
|
3 #define assert(E) if(!(E))__builtin_abort();
|
|
4
|
|
5 template<class T>
|
|
6 class zero_init
|
|
7 {
|
|
8 public:
|
|
9 zero_init( )
|
|
10 : val( static_cast<T>(0) ) { }
|
|
11 zero_init( T val ) : val( val )
|
|
12 { }
|
|
13 operator T & ( ) { return val; }
|
|
14 operator T ( ) const { return val; }
|
|
15 private:
|
|
16 T val;
|
|
17 };
|
|
18
|
|
19 void 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 }
|