24 #ifndef STATICLIB_SUPPORT_RELEASE_DELETER_HPP
25 #define STATICLIB_SUPPORT_RELEASE_DELETER_HPP
37 template<
typename T,
typename Deleter =
typename std::default_delete<T>>
39 std::shared_ptr<std::atomic_flag> released;
47 released(std::make_shared<std::atomic_flag>()) {
58 released(other.released) { }
74 if (!released->test_and_set(std::memory_order_acq_rel)) {
85 return !released->test_and_set(std::memory_order_acq_rel);
97 if (
nullptr != deleter) {
98 bool released = deleter->
release();
100 return std::unique_ptr<T>(ptr.get());
102 return std::unique_ptr<T>();
105 return std::unique_ptr<T>();