#pragma once
#include "cstddef"
#include "exception"

namespace std {

    class bad_alloc : public exception {
    public:
        virtual ~bad_alloc() {}
    };

    struct nothrow_t {
        explicit nothrow_t() {}
    };
    extern const nothrow_t nothrow;

    typedef void (*new_handler)();
    new_handler set_new_handler(new_handler new_p) throw();

}

void *operator new(std::size_t size) throw(std::bad_alloc);
void *operator new[](std::size_t size) throw(std::bad_alloc);
void operator delete(void *ptr) throw();
void operator delete[](void *ptr) throw();

// Placement new/delete
inline void *operator new(std::size_t size, void *place) throw() { return place; }

inline void *operator new[](std::size_t size, void *place) throw() { return place; }

inline void operator delete(void *ptr, void *place) throw() {}

inline void operator delete[](void *ptr, void *place) throw() {}
