Commit 2ca68adeaf17178b6de018ed1becad1f6989b6f6
1 parent
abe9ebd6
Fix positional arguments overload
Fixes #83. Adds an overload for positional arguments taking a `std::initializer_list`. When using an `initializer_list` with one argument, the function call is ambiguous matching both `std::string` and `std::vector<std::string>`.
Showing
3 changed files
with
14 additions
and
2 deletions
CHANGELOG.md
| ... | ... | @@ -12,6 +12,8 @@ options. The project adheres to semantic versioning. |
| 12 | 12 | when a positional argument could follow an option with an implicit value. |
| 13 | 13 | For example, `--foo value`, where `foo` has an implicit value, will be |
| 14 | 14 | parsed as `--foo=implicit` and a positional argument `value`. |
| 15 | +* Fixed an ambiguous overload in the `parse_positional` function when an | |
| 16 | + `initializer_list` was directly passed. | |
| 15 | 17 | |
| 16 | 18 | ## 2.0 |
| 17 | 19 | ... | ... |
include/cxxopts.hpp
| ... | ... | @@ -1211,6 +1211,9 @@ namespace cxxopts |
| 1211 | 1211 | void |
| 1212 | 1212 | parse_positional(std::vector<std::string> options); |
| 1213 | 1213 | |
| 1214 | + void | |
| 1215 | + parse_positional(std::initializer_list<std::string> options); | |
| 1216 | + | |
| 1214 | 1217 | std::string |
| 1215 | 1218 | help(const std::vector<std::string>& groups = {""}) const; |
| 1216 | 1219 | |
| ... | ... | @@ -1588,7 +1591,7 @@ inline |
| 1588 | 1591 | void |
| 1589 | 1592 | Options::parse_positional(std::string option) |
| 1590 | 1593 | { |
| 1591 | - parse_positional(std::vector<std::string>{option}); | |
| 1594 | + parse_positional(std::vector<std::string>{std::move(option)}); | |
| 1592 | 1595 | } |
| 1593 | 1596 | |
| 1594 | 1597 | inline |
| ... | ... | @@ -1602,6 +1605,13 @@ Options::parse_positional(std::vector<std::string> options) |
| 1602 | 1605 | } |
| 1603 | 1606 | |
| 1604 | 1607 | inline |
| 1608 | +void | |
| 1609 | +Options::parse_positional(std::initializer_list<std::string> options) | |
| 1610 | +{ | |
| 1611 | + parse_positional(std::vector<std::string>(std::move(options))); | |
| 1612 | +} | |
| 1613 | + | |
| 1614 | +inline | |
| 1605 | 1615 | ParseResult |
| 1606 | 1616 | Options::parse(int& argc, char**& argv) |
| 1607 | 1617 | { | ... | ... |
test/options.cpp
| ... | ... | @@ -145,7 +145,7 @@ TEST_CASE("All positional", "[positional]") |
| 145 | 145 | auto argc = av.argc(); |
| 146 | 146 | auto argv = av.argv(); |
| 147 | 147 | |
| 148 | - options.parse_positional("positional"); | |
| 148 | + options.parse_positional({"positional"}); | |
| 149 | 149 | |
| 150 | 150 | auto result = options.parse(argc, argv); |
| 151 | 151 | ... | ... |