Skip to content

Commit

Permalink
<memory>: Guard aligned allocation with __cpp_aligned_new (#1689)
Browse files Browse the repository at this point in the history
  • Loading branch information
CaseyCarter authored Feb 26, 2021
1 parent 6dd9e24 commit 9c79c21
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions stl/inc/memory
Original file line number Diff line number Diff line change
Expand Up @@ -2084,20 +2084,26 @@ template <class _Refc>
_NODISCARD _Refc* _Allocate_flexible_array(const size_t _Count) {
const size_t _Bytes = _Calculate_bytes_for_flexible_array<_Refc, _Check_overflow::_Yes>(_Count);
constexpr size_t _Align = alignof(_Refc);
if constexpr (_Align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
return static_cast<_Refc*>(::operator new(_Bytes));
} else {
#ifdef __cpp_aligned_new
if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
return static_cast<_Refc*>(::operator new (_Bytes, align_val_t{_Align}));
} else
#endif // __cpp_aligned_new
{
return static_cast<_Refc*>(::operator new(_Bytes));
}
}

template <class _Refc>
void _Deallocate_flexible_array(_Refc* const _Ptr) noexcept {
constexpr size_t _Align = alignof(_Refc);
if constexpr (_Align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
::operator delete(static_cast<void*>(_Ptr));
} else {
#ifdef __cpp_aligned_new
if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
::operator delete (static_cast<void*>(_Ptr), align_val_t{_Align});
} else
#endif // __cpp_aligned_new
{
::operator delete(static_cast<void*>(_Ptr));
}
}

Expand Down

0 comments on commit 9c79c21

Please sign in to comment.