#include #include #include #include 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("In place", "[in_place]") { tl::optional o1{tl::in_place}; tl::optional o2(tl::in_place); REQUIRE(o1); REQUIRE(o1 == 0); REQUIRE(o2); REQUIRE(o2 == 0); tl::optional o3(tl::in_place, 42); REQUIRE(o3 == 42); tl::optional> o4(tl::in_place, 0, 1); REQUIRE(o4); REQUIRE(std::get<0>(*o4) == 0); REQUIRE(std::get<1>(*o4) == 1); tl::optional> o5(tl::in_place, {0, 1}); REQUIRE(o5); REQUIRE((*o5)[0] == 0); REQUIRE((*o5)[1] == 1); tl::optional o6(tl::in_place, {0, 1}, 2, 3); REQUIRE(o6->v[0] == 0); REQUIRE(o6->v[1] == 1); REQUIRE(std::get<0>(o6->t) == 2); REQUIRE(std::get<1>(o6->t) == 3); }