#include #include #include #include #include namespace { struct takes_init_and_variadic { std::vector v; std::tuple t; template takes_init_and_variadic(std::initializer_list l, Args &&... args) : v(l), t(std::forward(args)...) {} }; } TEST_CASE("Emplace", "[emplace]") { { tl::expected,int> e; e.emplace(new int{42}); REQUIRE(e); REQUIRE(**e == 42); } { tl::expected,int> e; e.emplace({0,1}); REQUIRE(e); REQUIRE((*e)[0] == 0); REQUIRE((*e)[1] == 1); } { tl::expected,int> e; e.emplace(2,3); REQUIRE(e); REQUIRE(std::get<0>(*e) == 2); REQUIRE(std::get<1>(*e) == 3); } { tl::expected e = tl::make_unexpected(0); e.emplace({0,1}, 2, 3); REQUIRE(e); REQUIRE(e->v[0] == 0); REQUIRE(e->v[1] == 1); REQUIRE(std::get<0>(e->t) == 2); REQUIRE(std::get<1>(e->t) == 3); } }