From 58006ffb064c542cef813026156e710a6cfdb749 Mon Sep 17 00:00:00 2001 From: Cameron Pickett Date: Thu, 20 Apr 2017 18:33:05 -0700 Subject: [PATCH] Fix issue where compiler cannot determine address of ::free at compile time Reviewed By: Orvid Differential Revision: D4921738 fbshipit-source-id: 69848cda3638fca4ead73dcc9949af0f600f33bb --- folly/Memory.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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)); -- 2.34.1