No public description

PiperOrigin-RevId: 738397894
diff --git a/domain_tests/aggregate_combinators_test.cc b/domain_tests/aggregate_combinators_test.cc
index 07d12e7..4e4c175 100644
--- a/domain_tests/aggregate_combinators_test.cc
+++ b/domain_tests/aggregate_combinators_test.cc
@@ -277,7 +277,23 @@
   EXPECT_THAT(v, AnyOf(VariantWith<int>(_), VariantWith<double>(_)));
 }
 
-TEST(Variantof, ValidationRejectsInvalidValue) {
+struct Alternative1 {};
+
+struct Alternative2 {
+  int64_t value;
+};
+
+TEST(VariantOf, WorksWithStructInnerDomain) {
+  auto domain = VariantOf(StructOf<Alternative1>(),
+                          StructOf<Alternative2>(Arbitrary<int64_t>()));
+  absl::BitGen bitgen;
+  absl::variant<Alternative1, Alternative2> v =
+      Value(domain, bitgen).user_value;
+  EXPECT_THAT(
+      v, AnyOf(VariantWith<Alternative1>(_), VariantWith<Alternative2>(_)));
+}
+
+TEST(VariantOf, ValidationRejectsInvalidValue) {
   absl::BitGen bitgen;
 
   auto domain_a = VariantOf(InRange(0, 9), InRange(0.4, 9.1));
diff --git a/fuzztest/internal/domains/variant_of_impl.h b/fuzztest/internal/domains/variant_of_impl.h
index cb44463..25b7267 100644
--- a/fuzztest/internal/domains/variant_of_impl.h
+++ b/fuzztest/internal/domains/variant_of_impl.h
@@ -77,9 +77,8 @@
 
   value_type GetValue(const corpus_type& v) const {
     return Switch<sizeof...(Inner)>(v.index(), [&](auto I) -> value_type {
-      value_type out;
-      out.template emplace<I>(std::get<I>(inner_).GetValue(std::get<I>(v)));
-      return out;
+      return value_type(std::in_place_index<I>,
+                        std::get<I>(inner_).GetValue(std::get<I>(v)));
     });
   }