diff --git a/src/json.hpp b/src/json.hpp index 5b4bec8ae5..ab2b7d931d 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -7944,12 +7944,15 @@ class basic_json static T* create(Args&& ... args) { AllocatorType alloc; + + using AllocatorTraits = std::allocator_traits>; + auto deleter = [&](T * object) { - alloc.deallocate(object, 1); + AllocatorTraits::deallocate(alloc, object, 1); }; - std::unique_ptr object(alloc.allocate(1), deleter); - alloc.construct(object.get(), std::forward(args)...); + std::unique_ptr object(AllocatorTraits::allocate(alloc, 1), deleter); + AllocatorTraits::construct(alloc, object.get(), std::forward(args)...); assert(object != nullptr); return object.release(); } @@ -8112,37 +8115,37 @@ class basic_json void destroy(value_t t) { - switch (t) - { - case value_t::object: - { - AllocatorType alloc; - alloc.destroy(object); - alloc.deallocate(object, 1); - break; - } - - case value_t::array: - { - AllocatorType alloc; - alloc.destroy(array); - alloc.deallocate(array, 1); - break; - } - - case value_t::string: - { - AllocatorType alloc; - alloc.destroy(string); - alloc.deallocate(string, 1); - break; - } - - default: - { - break; - } - } + switch (t) + { + case value_t::object: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, object); + std::allocator_traits::deallocate(alloc, object, 1); + break; + } + + case value_t::array: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, array); + std::allocator_traits::deallocate(alloc, array, 1); + break; + } + + case value_t::string: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, string); + std::allocator_traits::deallocate(alloc, string, 1); + break; + } + + default: + { + break; + } + } } };