diff --git a/include/argparse.hpp b/include/argparse.hpp index b551865..771a54c 100644 --- a/include/argparse.hpp +++ b/include/argparse.hpp @@ -321,7 +321,7 @@ private: // If an argument starts with "-" or "--", then it's optional static bool is_optional(const std::string &aName) { - return (!aName.empty() && aName[0] == '-' && !is_integer(aName) && + return (aName.size() > 1 && aName[0] == '-' && !is_integer(aName) && !is_float(aName)); } diff --git a/test/test_optional_arguments.cpp b/test/test_optional_arguments.cpp index 2cb7395..8daf58a 100644 --- a/test/test_optional_arguments.cpp +++ b/test/test_optional_arguments.cpp @@ -12,6 +12,13 @@ DOCTEST_TEST_CASE("Parse toggle arguments with default value [optional_arguments REQUIRE(program["--verbose"] == false); } +DOCTEST_TEST_CASE("Argument '-' is not an optional argument [optional_arguments]") { + argparse::ArgumentParser program("test"); + program.add_argument("input"); + program.parse_args({ "./test.exe", "-"}); + REQUIRE(program.get("input") == "-"); +} + DOCTEST_TEST_CASE("Parse toggle arguments with implicit value [optional_arguments]") { argparse::ArgumentParser program("test"); program.add_argument("--verbose")