diff --git a/include/argparse.h b/include/argparse.h index d7e23e37..f85bd14e 100644 --- a/include/argparse.h +++ b/include/argparse.h @@ -696,7 +696,7 @@ namespace argparse }) | std::views::filter([&past_pseudo_arg](auto const & token) { - if (past_pseudo_arg) + if (past_pseudo_arg && (token.m_token != "--")) { return true; } diff --git a/test/unittest/test_parsing.cpp b/test/unittest/test_parsing.cpp index 6a7f2c2f..3f1d29a3 100644 --- a/test/unittest/test_parsing.cpp +++ b/test/unittest/test_parsing.cpp @@ -8,6 +8,8 @@ #include +using namespace std::string_literals; + TEST_CASE("Parsing arguments with help requested disregards parsing errors for missing positional argument") { auto parser = argparse::ArgumentParser().add_help(false).handle(argparse::Handle::none); @@ -163,3 +165,13 @@ TEST_CASE("Parsing") CHECK(args.get_value("opt1") == "o1"); CHECK(!args.get("opt2")); } + +TEST_CASE("Parsing") +{ + auto parser = argparse::ArgumentParser().handle(argparse::Handle::none); + parser.add_argument("pos").nargs(argparse::zero_or_more); + + auto args = parser.parse_args(5, cstr_arr{"prog", "p1", "p2", "--", "p3"}); + + CHECK(args.get_value>("pos") == std::vector{"p1"s, "p2"s, "p3"s}); +}