Files
clice/include/Test/LocationChain.h
2025-03-26 23:03:58 +08:00

33 lines
892 B
C++

#pragma once
#include <vector>
#include <iostream>
#include <source_location>
namespace clice::testing {
struct LocationChain {
/// All positions in the call chain, with the later
/// ones representing deeper inner levels.
std::vector<std::source_location> locations;
LocationChain(std::source_location current = std::source_location::current()) :
locations{current} {}
LocationChain(LocationChain& outer,
std::source_location current = std::source_location::current()) :
locations{std::move(outer.locations)} {
locations.emplace_back(current);
}
/// Dump all locations.
void backtrace() {
for(auto location: locations) {
std::cout << location.file_name() << ":" << location.line() << ":" << location.column()
<< "\n";
}
}
};
} // namespace clice::testing