From 7cbc66f65b6b46ca196e7ab4e4944315905953b3 Mon Sep 17 00:00:00 2001 From: Sean Robinson Date: Mon, 7 Feb 2022 14:27:06 -0700 Subject: [PATCH] Return default_arguments from operator& of two default_arguments operator& should return combined values of the same type, not a new type (i.e. bool). This is much more verbose, but easier to reason about without implied conversion. Signed-off-by: Sean Robinson --- include/argparse/argparse.hpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/include/argparse/argparse.hpp b/include/argparse/argparse.hpp index f5bb232..317ed2b 100644 --- a/include/argparse/argparse.hpp +++ b/include/argparse/argparse.hpp @@ -332,8 +332,11 @@ enum class default_arguments : unsigned int { all = help | version, }; -inline bool operator& (const default_arguments &a, const default_arguments &b) { - return static_cast(a) & static_cast(b); +inline default_arguments operator& (const default_arguments &a, + const default_arguments &b) { + return static_cast( + static_cast::type>(a) & + static_cast::type>(b)); } class ArgumentParser; @@ -857,7 +860,7 @@ public: std::string aVersion = "1.0", default_arguments aArgs = default_arguments::all) : mProgramName(std::move(aProgramName)), mVersion(std::move(aVersion)) { - if (aArgs & default_arguments::help) { + if ((aArgs & default_arguments::help) == default_arguments::help) { add_argument("-h", "--help") .action([&](const auto &) { std::cout << help().str(); @@ -868,7 +871,7 @@ public: .implicit_value(true) .nargs(0); } - if (aArgs & default_arguments::version) { + if ((aArgs & default_arguments::version) == default_arguments::version) { add_argument("-v", "--version") .action([&](const auto &) { std::cout << mVersion;