#pragma once

#include <sstream>
#include <stdexcept>

namespace Base {

class Exception : public std::runtime_error
{
public:
    using std::runtime_error::runtime_error;

    void reportException() const {}
};

class RuntimeError : public Exception
{
public:
    using Exception::Exception;
};

class ValueError : public Exception
{
public:
    using Exception::Exception;
};

}  // namespace Base

#define FC_THROWM(type, message) \
    do { \
        std::ostringstream freecad_naming_probe_exception_stream; \
        freecad_naming_probe_exception_stream << message; \
        throw type(freecad_naming_probe_exception_stream.str()); \
    } while (false)
