/* -*- c++ -*- */
#ifndef __NEW__
#define __NEW__

#include <cstddef>

extern "C++" {

namespace std {
    struct nothrow_t {};
    extern const nothrow_t nothrow;
}

void* operator new(std::size_t);
void* operator new[](std::size_t);
void  operator delete(void*) throw();
void  operator delete[](void*) throw();
void* operator new(std::size_t, const std::nothrow_t&);
void* operator new[](std::size_t, const std::nothrow_t&);
void  operator delete(void*, const std::nothrow_t&) throw();
void  operator delete[](void*, const std::nothrow_t&) throw();

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

// these next two are not really required, since exceptions are off
inline void  operator delete(void*, void*) throw() { }
inline void  operator delete[](void*, void*) throw() { }

}  // extern C++

#endif // __NEW__
