Skip to content

Commit

Permalink
Merge pull request opencv#16849 from anton-potapov:ap/variant__assign…
Browse files Browse the repository at this point in the history
…ment_operator_compile_error
  • Loading branch information
alalek committed Mar 23, 2020
2 parents 0b4c101 + 31d624f commit 978666c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
5 changes: 3 additions & 2 deletions modules/gapi/include/opencv2/gapi/util/variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,13 +281,14 @@ namespace util
template<class T> typename detail::are_different<variant<Ts...>, T, variant<Ts...>&>
::type variant<Ts...>::operator=(T&& t) noexcept
{
using decayed_t = typename std::decay<T>::type;
// FIXME: No version with implicit type conversion available!
static const constexpr std::size_t t_index =
util::type_list_index<T, Ts...>::value;
util::type_list_index<decayed_t, Ts...>::value;

if (t_index == m_index)
{
util::get<T>(*this) = std::move(t);
util::get<decayed_t>(*this) = std::move(t);
return *this;
}
else return (*this = variant(std::move(t)));
Expand Down
25 changes: 25 additions & 0 deletions modules/gapi/test/util/variant_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,18 @@ TEST(Variant, Assign_Basic)
EXPECT_EQ(42, util::get<int>(vis));
}

TEST(Variant, Assign_LValueRef)
{
TestVar vis;
EXPECT_EQ(0u, vis.index());
EXPECT_EQ(0, util::get<int>(vis));

int val = 42;
vis = val;
EXPECT_EQ(0u, vis.index());
EXPECT_EQ(42, util::get<int>(vis));
}

TEST(Variant, Assign_ValueUpdate_SameType)
{
TestVar vis(42);
Expand All @@ -139,6 +151,19 @@ TEST(Variant, Assign_ValueUpdate_DiffType)
EXPECT_EQ("42", util::get<std::string>(vis));
}

TEST(Variant, Assign_LValueRef_DiffType)
{
TestVar vis(42);

EXPECT_EQ(0u, vis.index());
EXPECT_EQ(42, util::get<int>(vis));

std::string s("42");
vis = s;
EXPECT_EQ(1u, vis.index());
EXPECT_EQ("42", util::get<std::string>(vis));
}

TEST(Variant, Assign_ValueUpdate_Const)
{
TestVar va(42);
Expand Down

0 comments on commit 978666c

Please sign in to comment.