// new standard header
#pragma once
#ifndef _NEW_
#define _NEW_
#ifndef RC_INVOKED
#include <exception>
#include <vcruntime_new.h>

#pragma pack(push,_CRT_PACKING)
#pragma warning(push,_STL_WARNING_LEVEL)
#pragma warning(disable: _STL_DISABLED_WARNINGS)
#pragma push_macro("new")

#undef new

_STD_BEGIN
#if _HAS_CXX17

 #if defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM) || defined(_M_ARM64)
_INLINE_VAR constexpr size_t hardware_constructive_interference_size = 64;
_INLINE_VAR constexpr size_t hardware_destructive_interference_size = 64;
 #else /* ^^^ supported hardware ^^^ // vvv unsupported hardware vvv */
  #error Unsupported architecture
 #endif /* hardware */

#endif /* _HAS_CXX17 */

		// SUPPORT TYPES
#if !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS)
// handler for operator new failures
typedef void (__CLRCALL_PURE_OR_CDECL * new_handler) ();
#endif /* !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS) */

		// FUNCTION AND OBJECT DECLARATIONS
_CRTIMP2 new_handler __cdecl set_new_handler(_In_opt_ new_handler) _NOEXCEPT;
_CRTIMP2 new_handler __cdecl get_new_handler() _NOEXCEPT;
_STD_END

#pragma pop_macro("new")
#pragma warning(pop)
#pragma pack(pop)

#endif /* RC_INVOKED */
#endif /* _NEW_ */

/*
 * Copyright (c) by P.J. Plauger. All rights reserved.
 * Consult your license regarding permissions and restrictions.
V6.50:0009 */
