cxx_contextual_conversions.cpp 635 B

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