// MPark.Variant // // Copyright Michael Park, 2015-2017 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) #include #include #include TEST(Ctor_InPlace, IndexDirect) { mpark::variant v(mpark::in_place_index_t<0>{}, 42); EXPECT_EQ(42, mpark::get<0>(v)); /* constexpr */ { constexpr mpark::variant cv(mpark::in_place_index_t<0>{}, 42); static_assert(42 == mpark::get<0>(cv), ""); } } TEST(Ctor_InPlace, IndexDirectDuplicate) { mpark::variant v(mpark::in_place_index_t<0>{}, 42); EXPECT_EQ(42, mpark::get<0>(v)); /* constexpr */ { constexpr mpark::variant cv(mpark::in_place_index_t<0>{}, 42); static_assert(42 == mpark::get<0>(cv), ""); } } TEST(Ctor_InPlace, IndexConversion) { mpark::variant v(mpark::in_place_index_t<1>{}, "42"); EXPECT_EQ("42", mpark::get<1>(v)); /* constexpr */ { constexpr mpark::variant cv(mpark::in_place_index_t<0>{}, 1.1); static_assert(1 == mpark::get<0>(cv), ""); } } TEST(Ctor_InPlace, IndexInitializerList) { mpark::variant v(mpark::in_place_index_t<1>{}, {'4', '2'}); EXPECT_EQ("42", mpark::get<1>(v)); } TEST(Ctor_InPlace, TypeDirect) { mpark::variant v(mpark::in_place_type_t{}, "42"); EXPECT_EQ("42", mpark::get(v)); /* constexpr */ { constexpr mpark::variant cv( mpark::in_place_type_t{}, 42); static_assert(42 == mpark::get(cv), ""); } } TEST(Ctor_InPlace, TypeConversion) { mpark::variant v(mpark::in_place_type_t{}, 42.5); EXPECT_EQ(42, mpark::get(v)); /* constexpr */ { constexpr mpark::variant cv( mpark::in_place_type_t{}, 42.5); static_assert(42 == mpark::get(cv), ""); } } TEST(Ctor_InPlace, TypeInitializerList) { mpark::variant v(mpark::in_place_type_t{}, {'4', '2'}); EXPECT_EQ("42", mpark::get(v)); }