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-exception 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef _LIBCPP_NEW 11#define _LIBCPP_NEW 12 13/* 14 new synopsis 15 16namespace std 17{ 18 19class bad_alloc 20 : public exception 21{ 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++14 30{ 31public: 32 bad_array_new_length() noexcept; 33}; 34 35enum class align_val_t : size_t {}; // C++17 36 37struct destroying_delete_t { // C++20 38 explicit destroying_delete_t() = default; 39}; 40inline constexpr destroying_delete_t destroying_delete{}; // C++20 41 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 barrier 49template <class T> [[nodiscard]] constexpr T* launder(T* p) noexcept; // C++17, nodiscard since C++20 50} // std 51 52void* operator new(std::size_t size); // replaceable, nodiscard in C++20 53void* operator new(std::size_t size, std::align_val_t alignment); // replaceable, C++17, nodiscard in C++20 54void* operator new(std::size_t size, const std::nothrow_t&) noexcept; // replaceable, nodiscard in C++20 55void* operator new(std::size_t size, std::align_val_t alignment, 56 const std::nothrow_t&) noexcept; // replaceable, C++17, nodiscard in C++20 57void operator delete(void* ptr) noexcept; // replaceable 58void operator delete(void* ptr, std::size_t size) noexcept; // replaceable, C++14 59void operator delete(void* ptr, std::align_val_t alignment) noexcept; // replaceable, C++17 60void operator delete(void* ptr, std::size_t size, 61 std::align_val_t alignment) noexcept; // replaceable, C++17 62void operator delete(void* ptr, const std::nothrow_t&) noexcept; // replaceable 63void operator delete(void* ptr, std:align_val_t alignment, 64 const std::nothrow_t&) noexcept; // replaceable, C++17 65 66void* operator new[](std::size_t size); // replaceable, nodiscard in C++20 67void* operator new[](std::size_t size, 68 std::align_val_t alignment) noexcept; // replaceable, C++17, nodiscard in C++20 69void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; // replaceable, nodiscard in C++20 70void* operator new[](std::size_t size, std::align_val_t alignment, 71 const std::nothrow_t&) noexcept; // replaceable, C++17, nodiscard in C++20 72void operator delete[](void* ptr) noexcept; // replaceable 73void operator delete[](void* ptr, std::size_t size) noexcept; // replaceable, C++14 74void operator delete[](void* ptr, 75 std::align_val_t alignment) noexcept; // replaceable, C++17 76void operator delete[](void* ptr, std::size_t size, 77 std::align_val_t alignment) noexcept; // replaceable, C++17 78void operator delete[](void* ptr, const std::nothrow_t&) noexcept; // replaceable 79void operator delete[](void* ptr, std::align_val_t alignment, 80 const std::nothrow_t&) noexcept; // replaceable, C++17 81 82void* operator new (std::size_t size, void* ptr) noexcept; // nodiscard in C++20, constexpr since C++26 83void* operator new[](std::size_t size, void* ptr) noexcept; // nodiscard in C++20, constexpr since C++26 84void 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#else 92# 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 >= 17 102# include <__new/interference_size.h> 103# include <__new/launder.h> 104# endif 105 106# if _LIBCPP_STD_VER >= 20 107# include <__new/destroying_delete_t.h> 108# endif 109 110// feature-test macros 111# include <version> 112 113# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 114# pragma GCC system_header 115# endif 116 117# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 118# include <cstddef> 119# include <cstdlib> 120# include <type_traits> 121# endif 122#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) 123 124#endif // _LIBCPP_NEW 125