25 lines
752 B
C++
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
|