Commit 31d624f9 authored by Anton Potapov's avatar Anton Potapov Committed by Anton Potapov

G-API utils - fix compilation error in variant::operator=

parent dbb30134
...@@ -281,13 +281,14 @@ namespace util ...@@ -281,13 +281,14 @@ namespace util
template<class T> typename detail::are_different<variant<Ts...>, T, variant<Ts...>&> template<class T> typename detail::are_different<variant<Ts...>, T, variant<Ts...>&>
::type variant<Ts...>::operator=(T&& t) noexcept ::type variant<Ts...>::operator=(T&& t) noexcept
{ {
using decayed_t = typename std::decay<T>::type;
// FIXME: No version with implicit type conversion available! // FIXME: No version with implicit type conversion available!
static const constexpr std::size_t t_index = 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) if (t_index == m_index)
{ {
util::get<T>(*this) = std::move(t); util::get<decayed_t>(*this) = std::move(t);
return *this; return *this;
} }
else return (*this = variant(std::move(t))); else return (*this = variant(std::move(t)));
......
...@@ -115,6 +115,18 @@ TEST(Variant, Assign_Basic) ...@@ -115,6 +115,18 @@ TEST(Variant, Assign_Basic)
EXPECT_EQ(42, util::get<int>(vis)); 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) TEST(Variant, Assign_ValueUpdate_SameType)
{ {
TestVar vis(42); TestVar vis(42);
...@@ -139,6 +151,19 @@ TEST(Variant, Assign_ValueUpdate_DiffType) ...@@ -139,6 +151,19 @@ TEST(Variant, Assign_ValueUpdate_DiffType)
EXPECT_EQ("42", util::get<std::string>(vis)); 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) TEST(Variant, Assign_ValueUpdate_Const)
{ {
TestVar va(42); TestVar va(42);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment