#ifndef _STD_EXCEPTION
#define _STD_EXCEPTION

// from rb3 decomp

namespace std {

    class exception {
    public:
        exception() {}
        virtual ~exception() {}
        virtual const char *what() const {
            return "exception";
        }
    };

    class bad_exception : public exception {
    public:
        bad_exception() {}
        virtual ~bad_exception() {}
        virtual const char *what() const {
            return "bad_exception";
        }
    };

    typedef void (*unexpected_handler)();
    unexpected_handler set_unexpected(unexpected_handler f) throw();
    void unexpected();

    typedef void (*terminate_handler)();
    terminate_handler set_terminate(terminate_handler f) throw();
    void terminate();

    bool uncaught_exception() throw();

} // namespace std

#endif
