diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index 80089be..1862c8b 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -2295,6 +2295,12 @@ OptionParser::parse(int argc, const char* const* argv) { parse_option(value, name, value->value().get_implicit_value()); } + else if (i + 1 < s.size()) + { + std::string arg_value = s.substr(i + 1); + parse_option(value, name, arg_value); + break; + } else { //error diff --git a/test/options.cpp b/test/options.cpp index 8bc6f49..75fea46 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -779,3 +779,28 @@ TEST_CASE("Const array", "[const]") { cxxopts::Options options("Empty options", " - test constness"); auto result = options.parse(2, option_list); } + +TEST_CASE("Parameter follow option", "[parameter]") { + cxxopts::Options options("param_follow_opt", " - test parameter follow option without space."); + options.add_options() + ("j,job", "Job", cxxopts::value>()); + Argv av({"implicit", + "-j", "9", + "--job", "7", + "--job=10", + "-j5", + }); + + auto ** argv = av.argv(); + auto argc = av.argc(); + + auto result = options.parse(argc, argv); + + REQUIRE(result.count("job") == 4); + + auto job_values = result["job"].as>(); + CHECK(job_values[0] == 9); + CHECK(job_values[1] == 7); + CHECK(job_values[2] == 10); + CHECK(job_values[3] == 5); +}