fork download
  1. #include <iostream>
  2. template <typename T>
  3. struct decrementer_raii
  4. {
  5. T& var;
  6. decrementer_raii(T& v) : var(v) {}
  7. ~decrementer_raii() { --var; }
  8. };
  9.  
  10. void foo(int& x)
  11. {
  12. decrementer_raii<int> dec(x);
  13. std::cout << x << "\n"; // x is still the original value passed-in (14)
  14. for (int i = 0; i < 10; ++i )
  15. {
  16. if ( i == 4 ) throw 10; // force a throw
  17. }
  18. }
  19.  
  20. int main()
  21. {
  22. int x = 14;
  23. try {
  24. foo(x);
  25. }
  26. catch(...) {}
  27. std::cout << x; // should print 13.
  28. }
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
14
13