VirtualBox

source: vbox/trunk/include/iprt/nocrt/new

Last change on this file was 106061, checked in by vboxsync, 2 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.1 KB
Line 
1/** @file
2 * IPRT / No-CRT - Our own new header.
3 */
4
5/*
6 * Copyright (C) 2006-2024 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef VBOX_INCLUDED_SRC_nocrt_new
37#define VBOX_INCLUDED_SRC_nocrt_new
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/types.h>
43
44
45/** MSC declares the operators as cdecl it seems. */
46#ifdef _MSC_VER
47# define RT_NEW_DELETE_CDECL __cdecl
48#else
49# define RT_NEW_DELETE_CDECL
50#endif
51
52/** MSC doesn't use the standard namespace. */
53#ifdef _MSC_VER
54# define RT_NEW_DELETE_SIZE_T size_t
55#else
56# define RT_NEW_DELETE_SIZE_T std::size_t
57#endif
58
59/** The hint that we're throwing std::bad_alloc is not apprecitated by MSC. */
60#ifdef RT_EXCEPTIONS_ENABLED
61# ifdef _MSC_VER
62# define RT_NEW_DELETE_THROWS_BAD_ALLOC
63# define RT_NEW_DELETE_NOTHROW RT_NO_THROW_DEF
64# else
65# ifdef _GLIBCXX_THROW
66# define RT_NEW_DELETE_THROWS_BAD_ALLOC _GLIBCXX_THROW(std::bad_alloc)
67# elif defined(__cplusplus) && (__cplusplus + 0) < 201700
68# define RT_NEW_DELETE_THROWS_BAD_ALLOC throw(std::bad_alloc)
69# else
70# define RT_NEW_DELETE_THROWS_BAD_ALLOC noexcept(false)
71# endif
72# define RT_NEW_DELETE_NOTHROW throw()
73# endif
74#else /* !RT_EXCEPTIONS_ENABLED */
75# define RT_NEW_DELETE_THROWS_BAD_ALLOC
76# define RT_NEW_DELETE_NOTHROW
77#endif /* !RT_EXCEPTIONS_ENABLED */
78
79
80#ifdef IPRT_NO_CRT
81
82namespace std
83{
84 struct nothrow_t
85 {
86 explicit nothrow_t()
87 {}
88 };
89 extern __declspec(selectany) nothrow_t const nothrow;
90}
91
92
93void *RT_NEW_DELETE_CDECL operator new(RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_THROWS_BAD_ALLOC;
94void *RT_NEW_DELETE_CDECL operator new(RT_NEW_DELETE_SIZE_T cb, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW;
95void *RT_NEW_DELETE_CDECL operator new(RT_NEW_DELETE_SIZE_T cb, void *pvPlacement) RT_NEW_DELETE_NOTHROW;
96void RT_NEW_DELETE_CDECL operator delete(void *pv) RT_NEW_DELETE_NOTHROW;
97#ifdef __cpp_sized_deallocation
98void RT_NEW_DELETE_CDECL operator delete(void *pv, RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_NOTHROW;
99#endif
100void RT_NEW_DELETE_CDECL operator delete(void *pv, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW;
101
102
103void *RT_NEW_DELETE_CDECL operator new[](RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_THROWS_BAD_ALLOC;
104void *RT_NEW_DELETE_CDECL operator new[](RT_NEW_DELETE_SIZE_T cb, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW;
105void *RT_NEW_DELETE_CDECL operator new[](RT_NEW_DELETE_SIZE_T cb, void *pvPlacement) RT_NEW_DELETE_NOTHROW;
106void RT_NEW_DELETE_CDECL operator delete[](void * pv) RT_NEW_DELETE_NOTHROW;
107#ifdef __cpp_sized_deallocation
108void RT_NEW_DELETE_CDECL operator delete[](void * pv, RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_NOTHROW;
109#endif
110void RT_NEW_DELETE_CDECL operator delete[](void *pv, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW;
111
112
113#else /* IPRT_NO_CRT */
114# include <new>
115#endif /* IPRT_NO_CRT */
116
117#endif /* !VBOX_INCLUDED_SRC_nocrt_new */
118
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette