diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index 6a6a85f..aa44a01 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -855,13 +855,13 @@ namespace cxxopts standard_value() { - set_implicit(); + set_default_and_implicit(); } standard_value(bool* b) : abstract_value(b) { - set_implicit(); + set_default_and_implicit(); } std::shared_ptr @@ -873,8 +873,10 @@ namespace cxxopts private: void - set_implicit() + set_default_and_implicit() { + m_default = true; + m_default_value = "false"; m_implicit = true; m_implicit_value = "true"; } diff --git a/test/options.cpp b/test/options.cpp index 503ed39..794486c 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -423,6 +423,9 @@ TEST_CASE("Booleans", "[boolean]") { ("bool", "A Boolean", cxxopts::value()) ("debug", "Debugging", cxxopts::value()) ("timing", "Timing", cxxopts::value()) + ("noExplicitDefault", "No Explicit Default", cxxopts::value()) + ("defaultTrue", "Timing", cxxopts::value()->default_value("true")) + ("defaultFalse", "Timing", cxxopts::value()->default_value("false")) ("others", "Other arguments", cxxopts::value>()) ; @@ -438,10 +441,16 @@ TEST_CASE("Booleans", "[boolean]") { REQUIRE(result.count("bool") == 1); REQUIRE(result.count("debug") == 1); REQUIRE(result.count("timing") == 1); + REQUIRE(result.count("noExplicitDefault") == 1); + REQUIRE(result.count("defaultTrue") == 1); + REQUIRE(result.count("defaultFalse") == 1); CHECK(result["bool"].as() == false); CHECK(result["debug"].as() == true); CHECK(result["timing"].as() == true); + CHECK(result["noExplicitDefault"].as() == false); + CHECK(result["defaultTrue"].as() == true); + CHECK(result["defaultFalse"].as() == false); REQUIRE(result.count("others") == 1); }