Skip to content

Commit

Permalink
Variant of private default constructible fix invalid return
Browse files Browse the repository at this point in the history
  • Loading branch information
eyalz800 committed Apr 1, 2024
1 parent 0fbd858 commit 03cc83a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
28 changes: 28 additions & 0 deletions test/src/test_variant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,34 @@ TEST(variant, string)
EXPECT_EQ(std::get<std::string>(v), "1234");
}

TEST(variant, private_default_constructible)
{
struct int_string : std::string
{
int_string(int i) : std::string(std::to_string(i))
{
}

private:
friend zpp::bits::access;
int_string() = default;
};

auto [data, in, out] = zpp::bits::data_in_out();
out(std::variant<std::string, int_string>(1234)).or_throw();

EXPECT_EQ(encode_hex(data),
"01"
"04000000"
"31323334");

std::variant<std::string, int_string> v;
in(v).or_throw();

EXPECT_TRUE(std::holds_alternative<int_string>(v));
EXPECT_EQ(std::get<int_string>(v), "1234");
}

namespace string_versioning::v1
{
struct person
Expand Down
1 change: 1 addition & 0 deletions zpp_bits.h
Original file line number Diff line number Diff line change
Expand Up @@ -2993,6 +2993,7 @@ class in
return result;
}
variant = std::move(*object);
return errc{};
}
}...};

Expand Down

0 comments on commit 03cc83a

Please sign in to comment.