libcxx initial import
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/new b/include/new
new file mode 100644
index 0000000..9d7ed45
--- /dev/null
+++ b/include/new
@@ -0,0 +1,106 @@
+// -*- C++ -*-
+//===----------------------------- new ------------------------------------===//
+//
+// ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_NEW
+#define _LIBCPP_NEW
+
+/*
+ new synopsis
+
+namespace std
+{
+
+class bad_alloc
+ : public exception
+{
+public:
+ bad_alloc() throw();
+ bad_alloc(const bad_alloc&) throw();
+ bad_alloc& operator=(const bad_alloc&) throw();
+ virtual ~bad_alloc() throw();
+ virtual const char* what() const throw();
+};
+
+struct nothrow_t {};
+extern const nothrow_t nothrow;
+typedef void (*new_handler)();
+new_handler set_new_handler(new_handler new_p) throw();
+
+} // std
+
+void* operator new(std::size_t size) throw(std::bad_alloc); // replaceable
+void* operator new(std::size_t size, const std::nothrow_t&) throw(); // replaceable
+void operator delete(void* ptr) throw(); // replaceable
+void operator delete(void* ptr, const std::nothrow_t&) throw(); // replaceable
+
+void* operator new[](std::size_t size) throw(std::bad_alloc); // replaceable
+void* operator new[](std::size_t size, const std::nothrow_t&) throw(); // replaceable
+void operator delete[](void* ptr) throw(); // replaceable
+void operator delete[](void* ptr, const std::nothrow_t&) throw(); // replaceable
+
+void* operator new (std::size_t size, void* ptr) throw();
+void* operator new[](std::size_t size, void* ptr) throw();
+void operator delete (void* ptr, void*) throw();
+void operator delete[](void* ptr, void*) throw();
+
+*/
+
+#include <__config>
+#include <exception>
+#include <cstddef>
+
+#pragma GCC system_header
+
+namespace std // purposefully not using versioning namespace
+{
+
+class _LIBCPP_EXCEPTION_ABI bad_alloc
+ : public exception
+{
+public:
+ _LIBCPP_INLINE_VISIBILITY bad_alloc() throw() {}
+ virtual ~bad_alloc() throw();
+ virtual const char* what() const throw();
+};
+
+class _LIBCPP_EXCEPTION_ABI bad_array_new_length
+ : public bad_alloc
+{
+public:
+ _LIBCPP_INLINE_VISIBILITY bad_array_new_length() throw() {}
+ virtual ~bad_array_new_length() throw();
+ virtual const char* what() const throw();
+};
+
+void __throw_bad_alloc();
+
+struct nothrow_t {};
+extern _LIBCPP_VISIBLE const nothrow_t nothrow;
+typedef void (*new_handler)();
+_LIBCPP_VISIBLE new_handler set_new_handler(new_handler) throw();
+
+} // std
+
+_LIBCPP_VISIBLE void* operator new(std::size_t) throw(std::bad_alloc);
+_LIBCPP_VISIBLE void* operator new(std::size_t, const std::nothrow_t&) throw();
+_LIBCPP_VISIBLE void operator delete(void*) throw();
+_LIBCPP_VISIBLE void operator delete(void*, const std::nothrow_t&) throw();
+
+_LIBCPP_VISIBLE void* operator new[](std::size_t) throw(std::bad_alloc);
+_LIBCPP_VISIBLE void* operator new[](std::size_t, const std::nothrow_t&) throw();
+_LIBCPP_VISIBLE void operator delete[](void*) throw();
+_LIBCPP_VISIBLE void operator delete[](void*, const std::nothrow_t&) throw();
+
+_LIBCPP_INLINE_VISIBILITY inline void* operator new (std::size_t, void* __p) throw() {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void* operator new[](std::size_t, void* __p) throw() {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete (void*, void*) throw() {}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete[](void*, void*) throw() {}
+
+#endif // _LIBCPP_NEW