Fix reporting invalid multi-value seeds

Instead of "78, ", print "7, 8".
diff --git a/e2e_tests/functional_test.cc b/e2e_tests/functional_test.cc
index 9ee676e..9f31953 100644
--- a/e2e_tests/functional_test.cc
+++ b/e2e_tests/functional_test.cc
@@ -134,10 +134,12 @@
   EXPECT_THAT(std_err,
               HasSubstr("Could not turn value into corpus type:\n{17}"));
   EXPECT_THAT(std_err, HasSubstr("The value 17 is not InRange(0, 10):\n{17}"));
+  EXPECT_THAT(std_err,
+              HasSubstr("The value 8 is not InRange(10, 20):\n{7, 8}"));
   // Valid seeds are not reported.
   EXPECT_THAT(std_err, Not(HasSubstr("{6}")));
   // Tests should still run.
-  EXPECT_THAT(std_out, HasSubstr("[  PASSED  ] 3 tests."));
+  EXPECT_THAT(std_out, HasSubstr("[  PASSED  ] 4 tests."));
   EXPECT_THAT(status, ExitCode(0));
 }
 
diff --git a/e2e_tests/testdata/fuzz_tests_with_invalid_seeds.cc b/e2e_tests/testdata/fuzz_tests_with_invalid_seeds.cc
index 2596ea1..924a22a 100644
--- a/e2e_tests/testdata/fuzz_tests_with_invalid_seeds.cc
+++ b/e2e_tests/testdata/fuzz_tests_with_invalid_seeds.cc
@@ -25,12 +25,17 @@
     // Map does not support seeds.
     .WithDomains(fuzztest::Map([](int) { return 0; },
                                fuzztest::Arbitrary<int>()))
-    .WithSeeds({{17}});
+    .WithSeeds({17});
 
 void InvalidSeedDueToCorpusValueOutOfDomain(int) {}
 FUZZ_TEST(MySuite, InvalidSeedDueToCorpusValueOutOfDomain)
     .WithDomains(fuzztest::InRange(0, 10))
-    .WithSeeds({{2}, {17}, {6}});
+    .WithSeeds({2, 17, 6});
+
+void InvalidMultiValueSeedDueToOneValueOutOfDomain(int, int) {}
+FUZZ_TEST(MySuite, InvalidMultiValueSeedDueToOneValueOutOfDomain)
+    .WithDomains(fuzztest::InRange(0, 10), fuzztest::InRange(10, 20))
+    .WithSeeds({{7, 8}});
 
 struct MyTest {
   void ShouldNotCrash(int) {}
diff --git a/fuzztest/internal/registration.h b/fuzztest/internal/registration.h
index 3c41864..0707fd4 100644
--- a/fuzztest/internal/registration.h
+++ b/fuzztest/internal/registration.h
@@ -182,14 +182,13 @@
 
     // We use a direct call to PrintUserValue because we don't have a
     // corpus_type object to pass to PrintValue.
-    bool first = true;
-    const auto print_one_arg = [&](auto I) {
+    auto print_one_arg = [seed, first = true](auto I) mutable {
+      if (!first) absl::FPrintF(stderr, ", ");
+      first = false;
       using value_type = std::decay_t<std::tuple_element_t<I, SeedT>>;
       AutodetectTypePrinter<value_type>().PrintUserValue(
           std::get<I>(seed), &std::cerr,
           domain_implementor::PrintMode::kHumanReadable);
-      if (!first) absl::FPrintF(stderr, ", ");
-      first = false;
     };
     ApplyIndex<Base::kNumArgs>([&](auto... I) { (print_one_arg(I), ...); });
     absl::FPrintF(stderr, "}\n\n");