#pragma once
#ifndef FATALEXCEPTION_H
#define FATALEXCEPTION_H
#include <iostream>
namespace objcgen {
template <class T, class... Args> [[noreturn]] void fatal(T&& what, Args&&... args);
class FatalException : public std::exception {
private:
FatalException() = default;
template <class T, class... Args> friend void fatal(T&& what, Args&&... args);
};
template <class T, class... Args> [[noreturn]] void fatal(T&& what, Args&&... args)
{
((std::cerr << std::forward<T>(what)) << ... << std::forward<Args>(args)) << std::endl;
throw FatalException();
}
}
#endif