fork download
  1. #include <cstdio>
  2. #include <vector>
  3. #include <iostream>
  4. #include <iterator>
  5.  
  6. struct Logger
  7. {
  8. const char* file;
  9. int lineno;
  10. const char* code;
  11.  
  12. ~Logger()
  13. {
  14. printf("logging error from line #%d when calling %s\n", lineno, code);
  15. }
  16. };
  17.  
  18. #define APIERROR(...) (Logger{__FILE__, __LINE__, #__VA_ARGS__}, (__VA_ARGS__))
  19.  
  20. int main()
  21. {
  22. std::vector<int> v;
  23. APIERROR(v.reserve(7));
  24. for (int i = 0; APIERROR(i*i) < 20; APIERROR(++ i))
  25. {
  26. APIERROR(v.push_back(i));
  27. }
  28.  
  29. APIERROR(std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n")));
  30. return 0;
  31. }
Success #stdin #stdout 0s 2960KB
stdin
Standard input is empty
stdout
logging error from line #23 when calling v.reserve(7)
logging error from line #24 when calling i*i
logging error from line #26 when calling v.push_back(i)
logging error from line #24 when calling ++ i
logging error from line #24 when calling i*i
logging error from line #26 when calling v.push_back(i)
logging error from line #24 when calling ++ i
logging error from line #24 when calling i*i
logging error from line #26 when calling v.push_back(i)
logging error from line #24 when calling ++ i
logging error from line #24 when calling i*i
logging error from line #26 when calling v.push_back(i)
logging error from line #24 when calling ++ i
logging error from line #24 when calling i*i
logging error from line #26 when calling v.push_back(i)
logging error from line #24 when calling ++ i
logging error from line #24 when calling i*i
0
1
2
3
4
logging error from line #29 when calling std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"))