cpp-utils/include/panic.hpp
2022-06-26 20:48:28 +01:00

25 lines
752 B
C++

#pragma once
#include "format.hpp"
#include "source_location.hpp"
#include <format>
#include <iostream>
#include <string_view>
namespace util {
template <typename... Ts> struct panic {
[[noreturn]] constexpr panic(
std::string_view fmt, Ts &&...args,
const source_location &source = source_location::current()) noexcept {
const auto str =
std::format("Panic in function {} in file {}:{},{}: {}\n",
source.function_name(), source.file_name(), source.line(),
source.column(), format(fmt, std::forward<Ts>(args)...));
std::cerr.write(str.c_str(), str.size());
std::abort();
}
};
template <typename... Ts> panic(std::string_view, Ts &&...) -> panic<Ts...>;
} // namespace util