diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index 8028b67..e84e876 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -2742,7 +2742,12 @@ Options::help(const std::vector& help_groups, bool print_usage) con String result = m_help_string; if(print_usage) { - result+= "\nUsage:\n " + toLocalString(m_program) + " " + toLocalString(m_custom_help); + result+= "\nUsage:\n " + toLocalString(m_program); + } + + if (!m_custom_help.empty()) + { + result += " " + toLocalString(m_custom_help); } if (!m_positional.empty() && !m_positional_help.empty()) { diff --git a/test/options.cpp b/test/options.cpp index 288810d..4fed683 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -918,3 +918,27 @@ TEST_CASE("Iterator", "[iterator]") { REQUIRE(++iter == result.end()); } + +TEST_CASE("No Options help", "[options]") +{ + std::vector positional; + + cxxopts::Options options("test", "test no options help"); + + // explicitly setting custom help empty to overwrite + // default "[OPTION...]" when there are no options + options.positional_help("...") + .custom_help("") + .add_options() + ("positional", "", cxxopts::value>(positional)); + + Argv av({"test", "posArg1", "posArg2", "posArg3"}); + + auto argc = av.argc(); + auto** argv = av.argv(); + + options.parse_positional({"positional"}); + + CHECK_NOTHROW(options.parse(argc, argv)); + CHECK(options.help().find("test ...") != std::string::npos); +}