From: Cameron Pickett Date: Fri, 21 Apr 2017 01:33:05 +0000 (-0700) Subject: Fix issue where compiler cannot determine address of ::free at compile time X-Git-Tag: v2017.04.24.00~4 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=58006ffb064c542cef813026156e710a6cfdb749;hp=7de5a995c46b4ef706eda82483fe7d25f33a11ea Fix issue where compiler cannot determine address of ::free at compile time Reviewed By: Orvid Differential Revision: D4921738 fbshipit-source-id: 69848cda3638fca4ead73dcc9949af0f600f33bb --- diff --git a/folly/Memory.h b/folly/Memory.h index d2442219..272d64dc 100644 --- a/folly/Memory.h +++ b/folly/Memory.h @@ -137,7 +137,18 @@ std::weak_ptr to_weak_ptr(const std::shared_ptr& ptr) { return std::weak_ptr(ptr); } -using SysBufferDeleter = static_function_deleter; +namespace detail { +/** + * Not all STL implementations define ::free in a way that its address can be + * determined at compile time. So we must wrap ::free in a function whose + * address can be determined. + */ +inline void SysFree(void* p) { + ::free(p); +} +} + +using SysBufferDeleter = static_function_deleter; using SysBufferUniquePtr = std::unique_ptr; inline SysBufferUniquePtr allocate_sys_buffer(size_t size) { return SysBufferUniquePtr(::malloc(size));