https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77691
--- Comment #33 from Jonathan Wakely <redi at gcc dot gnu.org> --- I've been working on this again, and I think that the resource_adaptor type is the wrong place to fix the malloc alignment problem. The correct fix is to adjust the value of __STDCPP_DEFAULT_NEW_ALIGNMENT__ on targets where malloc doesn't agree with GCC's alignof(max_align_t). Otherwise even if I make resource_adaptor work for those targets, this test will still fail: #include <memory> #include <cstddef> #include <cstdint> #include <assert.h> template<typename T> inline bool aligned(void* p) { return (reinterpret_cast<std::uintptr_t>(p) % alignof(T)) == 0; } int main() { using test_type = std::max_align_t; // largest fundamental alignment std::allocator<test_type> a; for (int i = 0; i < 10; ++i) { test_type* p1 = a.allocate(1); VERIFY( aligned<test_type>(p1) ); test_type* p2 = a.allocate(20); VERIFY( aligned<test_type>(p2) ); a.deallocate(p1, 1); a.deallocate(p2, 20); } } If we make std::allocator<max_align_t> work then the tests for resource_adaptor will also work, at least on Solaris.