#pragma once #include #include #include namespace clice::testing { struct LocationChain { /// All positions in the call chain, with the later /// ones representing deeper inner levels. std::vector 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