cxx_contextual_conversions.cpp 503 B

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