std::extent<T>::value != 0, std::unique_ptr<T, Dp>>::type
make_unique(Args&&...) = delete;
+/**
+ * to_shared_ptr
+ *
+ * Convert unique_ptr to shared_ptr without specifying the template type
+ * parameter and letting the compiler deduce it.
+ *
+ * So you can write this:
+ *
+ * auto sptr = to_shared_ptr(getSomethingUnique<T>());
+ *
+ * Instead of this:
+ *
+ * auto sptr = shared_ptr<T>(getSomethingUnique<T>());
+ *
+ * Useful when `T` is long, such as:
+ *
+ * using T = foobar::cpp2::FooBarServiceAsyncClient;
+ */
+template <typename T>
+std::shared_ptr<T> to_shared_ptr(std::unique_ptr<T>&& ptr) {
+ return std::shared_ptr<T>(std::move(ptr));
+}
+
/**
* A SimpleAllocator must provide two methods:
*
using namespace folly;
+TEST(shared_ptr, example) {
+ auto uptr = make_unique<std::string>("hello");
+ auto sptr = to_shared_ptr(std::move(uptr));
+ EXPECT_EQ(nullptr, uptr);
+ EXPECT_EQ("hello", *sptr);
+}
+
template <std::size_t> struct T {};
template <std::size_t> struct S {};
template <std::size_t> struct P {};