From 3d16697b5d0bb1dafeb535e22c316d7590a8cc22 Mon Sep 17 00:00:00 2001 From: Andreas Buhr Date: Wed, 25 Feb 2026 07:05:40 +0100 Subject: [PATCH] Add reproducer for GitHub issue 317 https://github.com/boostorg/parser/issues/317 1.89 broke "variant-derived rule attributes" --- test/github_issues.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/github_issues.cpp b/test/github_issues.cpp index 03dd3099..6f79ab38 100644 --- a/test/github_issues.cpp +++ b/test/github_issues.cpp @@ -777,6 +777,39 @@ void github_issue_312() BOOST_TEST(result.value()->evaluate() == ((2*0.1) + 33.) * (2 + 3) + 3.1415 * 2); } +namespace github_issue_317_ { + namespace bp = boost::parser; + + struct Val; + using ValsStorage = std::vector; + struct Vals : ValsStorage { using ValsStorage::ValsStorage; }; + + struct Val : std::variant { + using base = std::variant; + using base::base; + using base::operator=; + bool negated = false; + }; + + bp::rule const num {"number"}; + bp::rule const vals {"vals"}; + bp::rule const val {"val"}; + + auto const num_def = bp::int_; + auto const vals_def = bp::lit("vals") > '(' > val % ',' > ')'; + auto const val_def = vals | num; + BOOST_PARSER_DEFINE_RULES(num, vals, val); +} + +void github_issue_317() +{ + // Pattern: recursive variant-derived type with vector-inheriting alternatives. + namespace bp = boost::parser; + using namespace github_issue_317_; + + auto r = bp::parse("42", val, bp::ws); + BOOST_TEST(r.has_value()); +} int main() { @@ -796,5 +829,6 @@ int main() github_issue_294(); github_pr_297(); github_issue_312(); + github_issue_317(); return boost::report_errors(); }