diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 750ac31d9..c75577090 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -102,6 +102,9 @@ jobs: gcc9: containerImage: gcc:9 cli11.std: 17 + gcc11: + containerImage: gcc:11 + cli11.std: 20 gcc8: containerImage: gcc:8 cli11.std: 17 diff --git a/include/CLI/App.hpp b/include/CLI/App.hpp index 803f0f7f6..b2552e20b 100644 --- a/include/CLI/App.hpp +++ b/include/CLI/App.hpp @@ -799,9 +799,10 @@ class App { /// Add option for flag with integer result - defaults to allowing multiple passings, but can be forced to one /// if `multi_option_policy(CLI::MultiOptionPolicy::Throw)` is used. - template ::value && !is_bool::value, detail::enabler> = - detail::dummy> + template < + typename T, + enable_if_t::value && !std::is_const::value && !is_bool::value, + detail::enabler> = detail::dummy> Option *add_flag(std::string flag_name, T &flag_count, ///< A variable holding the count std::string flag_description = "") { diff --git a/tests/AppTest.cpp b/tests/AppTest.cpp index d425b414c..3e39a7c9b 100644 --- a/tests/AppTest.cpp +++ b/tests/AppTest.cpp @@ -2308,3 +2308,11 @@ TEST_CASE_METHOD(TApp, "logFormSingleDash", "[app]") { CHECK(veryverbose); CHECK(veryveryverbose); } + +TEST_CASE("C20_compile", "simple") { + CLI::App app{"test"}; + auto flag = app.add_flag("--flag", "desc"); + + app.parse("--flag"); + CHECK_FALSE(flag->empty()); +} diff --git a/tests/OptionalTest.cpp b/tests/OptionalTest.cpp index 5ea20be9d..e2e576f9d 100644 --- a/tests/OptionalTest.cpp +++ b/tests/OptionalTest.cpp @@ -239,16 +239,19 @@ TEST_CASE_METHOD(TApp, "BoostOptionalEnumTest", "[optional]") { auto dstring = optptr->get_default_str(); CHECK(dstring.empty()); run(); - CHECK(!opt); + auto checkOpt = static_cast(opt); + CHECK_FALSE(checkOpt); args = {"-v", "3"}; run(); - CHECK(opt); + checkOpt = static_cast(opt); + CHECK(checkOpt); CHECK(*opt == eval::val3); opt = {}; args = {"--val", "1"}; run(); - CHECK(opt); + checkOpt = static_cast(opt); + CHECK(checkOpt); CHECK(*opt == eval::val1); }