125 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_NEW11#define _LIBCPP_NEW12 13/*14 new synopsis15 16namespace std17{18 19class bad_alloc20 : public exception21{22public:23 bad_alloc() noexcept;24 bad_alloc(const bad_alloc&) noexcept;25 bad_alloc& operator=(const bad_alloc&) noexcept;26 virtual const char* what() const noexcept;27};28 29class bad_array_new_length : public bad_alloc // C++1430{31public:32 bad_array_new_length() noexcept;33};34 35enum class align_val_t : size_t {}; // C++1736 37struct destroying_delete_t { // C++2038 explicit destroying_delete_t() = default;39};40inline constexpr destroying_delete_t destroying_delete{}; // C++2041 42struct nothrow_t { explicit nothrow_t() = default; };43extern const nothrow_t nothrow;44typedef void (*new_handler)();45new_handler set_new_handler(new_handler new_p) noexcept;46new_handler get_new_handler() noexcept;47 48// 21.6.4, pointer optimization barrier49template <class T> [[nodiscard]] constexpr T* launder(T* p) noexcept; // C++17, nodiscard since C++2050} // std51 52void* operator new(std::size_t size); // replaceable, nodiscard in C++2053void* operator new(std::size_t size, std::align_val_t alignment); // replaceable, C++17, nodiscard in C++2054void* operator new(std::size_t size, const std::nothrow_t&) noexcept; // replaceable, nodiscard in C++2055void* operator new(std::size_t size, std::align_val_t alignment,56 const std::nothrow_t&) noexcept; // replaceable, C++17, nodiscard in C++2057void operator delete(void* ptr) noexcept; // replaceable58void operator delete(void* ptr, std::size_t size) noexcept; // replaceable, C++1459void operator delete(void* ptr, std::align_val_t alignment) noexcept; // replaceable, C++1760void operator delete(void* ptr, std::size_t size,61 std::align_val_t alignment) noexcept; // replaceable, C++1762void operator delete(void* ptr, const std::nothrow_t&) noexcept; // replaceable63void operator delete(void* ptr, std:align_val_t alignment,64 const std::nothrow_t&) noexcept; // replaceable, C++1765 66void* operator new[](std::size_t size); // replaceable, nodiscard in C++2067void* operator new[](std::size_t size,68 std::align_val_t alignment) noexcept; // replaceable, C++17, nodiscard in C++2069void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; // replaceable, nodiscard in C++2070void* operator new[](std::size_t size, std::align_val_t alignment,71 const std::nothrow_t&) noexcept; // replaceable, C++17, nodiscard in C++2072void operator delete[](void* ptr) noexcept; // replaceable73void operator delete[](void* ptr, std::size_t size) noexcept; // replaceable, C++1474void operator delete[](void* ptr,75 std::align_val_t alignment) noexcept; // replaceable, C++1776void operator delete[](void* ptr, std::size_t size,77 std::align_val_t alignment) noexcept; // replaceable, C++1778void operator delete[](void* ptr, const std::nothrow_t&) noexcept; // replaceable79void operator delete[](void* ptr, std::align_val_t alignment,80 const std::nothrow_t&) noexcept; // replaceable, C++1781 82void* operator new (std::size_t size, void* ptr) noexcept; // nodiscard in C++20, constexpr since C++2683void* operator new[](std::size_t size, void* ptr) noexcept; // nodiscard in C++20, constexpr since C++2684void operator delete (void* ptr, void*) noexcept;85void operator delete[](void* ptr, void*) noexcept;86 87*/88 89#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)90# include <__cxx03/new>91#else92# include <__config>93# include <__new/align_val_t.h>94# include <__new/allocate.h>95# include <__new/exceptions.h>96# include <__new/global_new_delete.h>97# include <__new/new_handler.h>98# include <__new/nothrow_t.h>99# include <__new/placement_new_delete.h>100 101# if _LIBCPP_STD_VER >= 17102# include <__new/interference_size.h>103# include <__new/launder.h>104# endif105 106# if _LIBCPP_STD_VER >= 20107# include <__new/destroying_delete_t.h>108# endif109 110// feature-test macros111# include <version>112 113# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)114# pragma GCC system_header115# endif116 117# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20118# include <cstddef>119# include <cstdlib>120# include <type_traits>121# endif122#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)123 124#endif // _LIBCPP_NEW125