fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. struct Callsite {
  5. const char* file_;
  6. size_t line_;
  7.  
  8. static thread_local std::vector<Callsite*> callStack;
  9.  
  10. Callsite(const char* file, size_t line) : file_(file), line_(line) {
  11. callStack.push_back(this);
  12. }
  13. ~Callsite() noexcept { callStack.pop_back(); }
  14. };
  15.  
  16. thread_local std::vector<Callsite*> Callsite::callStack;
  17.  
  18. #define ENTER Callsite __callsite_entry(__FILE__, __LINE__);
  19.  
  20. void f() {
  21. ENTER;
  22.  
  23. for (auto&& stack: Callsite::callStack) {
  24. std::cout << stack->file_ << ":" << stack->line_ << "\n";
  25. }
  26. }
  27.  
  28. int main() {
  29. ENTER;
  30. f();
  31. }
  32.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
prog.cpp:29
prog.cpp:21