// empty target { eggs::variant<int, std::string> v; REQUIRE(bool(v) == false); REQUIRE(v.which() == npos); v = 42; CHECK(bool(v) == true); CHECK(v.which() == 0u); REQUIRE(v.target<int>() != nullptr); CHECK(*v.target<int>() == 42); #if EGGS_CXX98_HAS_RTTI CHECK(v.target_type() == typeid(int)); #endif #if EGGS_CXX14_HAS_CONSTEXPR // constexpr { struct test { static constexpr int call() { eggs::variant<int, ConstexprTrivial> v; v = ConstexprTrivial(42); return 0; }}; constexpr int c = test::call(); } #endif }
#include "catch.hpp" #include "constexpr.hpp" using eggs::variants::in_place; TEST_CASE("variant<Ts...>::variant(in_place<I>, Args&&...)", "[variant.cnstr]") { eggs::variant<int, std::string> v(in_place<0>, 42); CHECK(bool(v) == true); CHECK(v.which() == 0u); REQUIRE(v.target<int>() != nullptr); CHECK(*v.target<int>() == 42); #if EGGS_CXX98_HAS_RTTI CHECK(v.target_type() == typeid(int)); #endif #if EGGS_CXX11_HAS_CONSTEXPR SECTION("constexpr") { constexpr eggs::variant<int, Constexpr> v(in_place<1>, 42); constexpr bool vb = bool(v); constexpr std::size_t vw = v.which(); constexpr bool vttb = v.target<Constexpr>()->x == 42; # if EGGS_CXX98_HAS_RTTI constexpr std::type_info const& vtt = v.target_type(); # endif # if EGGS_CXX14_HAS_CONSTEXPR