diff --git a/include/argparse.h b/include/argparse.h index 0139d3f4..c20eae5f 100644 --- a/include/argparse.h +++ b/include/argparse.h @@ -683,6 +683,10 @@ namespace argparse { return token.m_consumed; }) + | std::views::take_while([](auto const & token) + { + return !token.m_consumed; + }) | std::views::filter([&past_pseudo_arg](auto const & token) { if (past_pseudo_arg && (token.m_token != "--")) diff --git a/test/unittest/test_parsing.cpp b/test/unittest/test_parsing.cpp index 6ee80e8d..77cf1a31 100644 --- a/test/unittest/test_parsing.cpp +++ b/test/unittest/test_parsing.cpp @@ -174,3 +174,12 @@ TEST_CASE("Parsing") CHECK(args.get_value>("pos") == std::vector{"p1"s, "p2"s, "p3"s}); } + +TEST_CASE("Parsing") +{ + auto parser = argparse::ArgumentParser().handle(argparse::Handle::none); + parser.add_argument("pos").nargs(argparse::zero_or_more); + parser.add_argument("-f").action(argparse::store_true); + + CHECK_THROWS_WITH_AS(parser.parse_args(5, cstr_arr{"prog", "p1", "p2", "-f", "p3"}), "unrecognised arguments: p3", argparse::parsing_error); +}