#pragma once
#include <__cpp_config.hpp>

#include <exception>

extern "C++" {
namespace std {


class bad_alloc: public exception {
public:
	bad_alloc() __NOTHROW {}
#ifdef __CXX11
	bad_alloc(const bad_alloc &) = default;
	bad_alloc &operator=(const bad_alloc &) = default;
#endif
	virtual ~bad_alloc() __NOTHROW {}

	virtual const char *what() const __NOTHROW { return "std::bad_alloc"; }
};

#ifdef __CXX11
class bad_array_new_length: public bad_alloc {
public:
	bad_array_new_length() __NOTHROW {}
	virtual ~bad_array_new_length() __NOTHROW {}

	virtual const char *what() const __NOTHROW { return "std::bad_array_new_length"; }
};
#endif


#ifdef __CXX17
enum class align_val_t : size_t {};
#endif

struct nothrow_t {
#ifdef __CXX11
	explicit nothrow_t() = default;
#endif
};
extern const nothrow_t nothrow;


// new_handler omitted

// new/delete omitted, use memory/memory.hpp


} // namespace std
}