#include "catch.hpp" #include #include struct foo { foo() = default; foo(foo&) = delete; foo(foo&&) {}; }; TEST_CASE("Constructors", "[constructors]") { tl::optional o1; REQUIRE(!o1); tl::optional o2 = tl::nullopt; REQUIRE(!o2); tl::optional o3 = 42; REQUIRE(*o3 == 42); tl::optional o4 = o3; REQUIRE(*o4 == 42); tl::optional o5 = o1; REQUIRE(!o5); tl::optional o6 = std::move(o3); REQUIRE(*o6 == 42); tl::optional o7 = 42; REQUIRE(*o7 == 42); tl::optional o8 = o7; REQUIRE(*o8 == 42); tl::optional o9 = std::move(o7); REQUIRE(*o9 == 42); { tl::optional o; REQUIRE(!o); tl::optional oo = o; REQUIRE(!oo); } { auto i = 42; tl::optional o = i; REQUIRE(o); REQUIRE(*o == 42); tl::optional oo = o; REQUIRE(oo); REQUIRE(*oo == 42); } std::vector v; v.emplace_back(); tl::optional> ov = std::move(v); REQUIRE(ov->size() == 1); }