#include #include struct TestValue { explicit TestValue(const int& x) : lvalue_(x) {} explicit TestValue(int&& x) : rvalue_(x) {} std::optional lvalue_; std::optional rvalue_; }; TEST(MakeUniqueTest, ForwardRvaluesCorrectly) { auto ptr = std::make_unique(123); ASSERT_FALSE(ptr->lvalue_.has_value()); ASSERT_TRUE(ptr->rvalue_.has_value()); ASSERT_EQ(*ptr->rvalue_, 123); } TEST(MakeUniqueTest, ForwardLvaluesCorrectly) { int x = 5; auto ptr = std::make_unique(x); ASSERT_TRUE(ptr->lvalue_.has_value()); ASSERT_EQ(*ptr->lvalue_, 5); ASSERT_FALSE(ptr->rvalue_.has_value()); } TEST(MakeUniqueTest, CanConstructUniquePtrOfArray) { // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays) auto ptr = std::make_unique(3); // Value initialization is required by the standard. ASSERT_EQ(ptr[0], 0); ASSERT_EQ(ptr[1], 0); ASSERT_EQ(ptr[2], 0); }