From 2ca68adeaf17178b6de018ed1becad1f6989b6f6 Mon Sep 17 00:00:00 2001 From: Jarryd Beck Date: Tue, 28 Nov 2017 17:56:03 +1100 Subject: [PATCH] Fix positional arguments overload --- CHANGELOG.md | 2 ++ include/cxxopts.hpp | 12 +++++++++++- test/options.cpp | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11af807..4cafff1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ options. The project adheres to semantic versioning. when a positional argument could follow an option with an implicit value. For example, `--foo value`, where `foo` has an implicit value, will be parsed as `--foo=implicit` and a positional argument `value`. +* Fixed an ambiguous overload in the `parse_positional` function when an + `initializer_list` was directly passed. ## 2.0 diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index bb486c5..4bf91b4 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -1211,6 +1211,9 @@ namespace cxxopts void parse_positional(std::vector options); + void + parse_positional(std::initializer_list options); + std::string help(const std::vector& groups = {""}) const; @@ -1588,7 +1591,7 @@ inline void Options::parse_positional(std::string option) { - parse_positional(std::vector{option}); + parse_positional(std::vector{std::move(option)}); } inline @@ -1602,6 +1605,13 @@ Options::parse_positional(std::vector options) } inline +void +Options::parse_positional(std::initializer_list options) +{ + parse_positional(std::vector(std::move(options))); +} + +inline ParseResult Options::parse(int& argc, char**& argv) { diff --git a/test/options.cpp b/test/options.cpp index 3879660..503ed39 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -145,7 +145,7 @@ TEST_CASE("All positional", "[positional]") auto argc = av.argc(); auto argv = av.argv(); - options.parse_positional("positional"); + options.parse_positional({"positional"}); auto result = options.parse(argc, argv); -- libgit2 0.21.4