return std::weak_ptr<T>(ptr);
}
-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);
-}
-}
+struct SysBufferDeleter {
+ void operator()(void* p) const {
+ ::free(p);
+ }
+};
-using SysBufferDeleter = static_function_deleter<void, &detail::SysFree>;
using SysBufferUniquePtr = std::unique_ptr<void, SysBufferDeleter>;
inline SysBufferUniquePtr allocate_sys_buffer(size_t size) {
return SysBufferUniquePtr(::malloc(size));
public:
void* allocate(size_t size) {
void* p = ::malloc(size);
- if (!p) throw std::bad_alloc();
+ if (!p) {
+ throw std::bad_alloc();
+ }
return p;
}
void deallocate(void* p) {
{
typedef typename std::remove_reference<Allocator>::type allocator_type;
-public:
+ public:
typedef typename Allocator::pointer pointer;
allocator_delete() = default;
}
void operator()(pointer p) const {
- if (!p) return;
+ if (!p) {
+ return;
+ }
const_cast<allocator_delete*>(this)->destroy(p);
const_cast<allocator_delete*>(this)->deallocate(p, 1);
}
typedef typename std::remove_reference<T>::type value_type;
typedef value_type* pointer;
-public:
+ public:
constexpr static bool value = !has_destroy<allocator, void(pointer)>::value
&& !has_destroy<allocator, void(void*)>::value;
};
*/
template <typename T>
class enable_shared_from_this : public std::enable_shared_from_this<T> {
-public:
+ public:
constexpr enable_shared_from_this() noexcept = default;
std::weak_ptr<T> weak_from_this() noexcept {
return weak_from_this_<T>(this);
}
-private:
+ private:
// Uses SFINAE to detect and call
// std::enable_shared_from_this<T>::weak_from_this() if available. Falls
// back to std::enable_shared_from_this<T>::shared_from_this() otherwise.
#endif
-} // namespace folly
+} // namespace folly