https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92143
Bug ID: 92143 Summary: std::pmr::polymorphic_allocator<char> throws bad_alloc on macOS Product: gcc Version: 9.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc-bugzilla at daryl dot haresign.com Target Milestone: --- The following code throws a std::bad_alloc on macOS (seen via GCC 9.2 installed with Homebrew, on macOS Catalina 10.15): #include <memory_resource> #include <string> int main() { std::pmr::string s { "0123456789abcdef" }; } 16 characters is required to get it to overflow SSO. The same issue can be seen with the following code: #include <memory_resource> int main() { std::pmr::polymorphic_allocator<char> alloc { std::pmr::new_delete_resource() }; alloc.allocate(1); } Changing the type from char to short, and char to int, yields the same error. Once you get to long, it starts working. Presumably power-of-two alignments less than sizeof(void *) are not supported (that's certainly what posix_memalign says). Looking through the wording, it's all down to a question of whether [mem.res.private] p2 allows for your memory resources to force the alignment to be at least alignof(void *). I would say the answer is probably yes. http://eel.is/c++draft/mem.res#private-2