shared_ptr.hpp: implement make_single_value(), make_shared_value()

A function that constructs single_ptr from its argument.
Type can be deduced from the argument (unlike make_single).
This commit is contained in:
Nekotekina 2021-04-24 14:29:43 +03:00
parent e34c956196
commit b704cc8375
2 changed files with 17 additions and 3 deletions

View File

@ -388,6 +388,12 @@ namespace stx
return single_ptr<T>(*ptr, std::launder(arr)); return single_ptr<T>(*ptr, std::launder(arr));
} }
template <typename T>
static single_ptr<std::remove_reference_t<T>> make_single_value(T&& value)
{
return make_single<std::remove_reference_t<T>>(std::forward<T>(value));
}
#ifndef _MSC_VER #ifndef _MSC_VER
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif #endif
@ -659,6 +665,12 @@ namespace stx
return make_single<T, Init>(count); return make_single<T, Init>(count);
} }
template <typename T>
static shared_ptr<std::remove_reference_t<T>> make_shared_value(T&& value)
{
return make_single_value(std::forward<T>(value));
}
// Atomic simplified shared pointer // Atomic simplified shared pointer
template <typename T> template <typename T>
class atomic_ptr class atomic_ptr
@ -1263,3 +1275,5 @@ using stx::single_ptr;
using stx::shared_ptr; using stx::shared_ptr;
using stx::atomic_ptr; using stx::atomic_ptr;
using stx::make_single; using stx::make_single;
using stx::make_single_value;
using stx::make_shared_value;