diff --git a/include/argparse/argparse.hpp b/include/argparse/argparse.hpp index ee9ccd9..f8d84f9 100644 --- a/include/argparse/argparse.hpp +++ b/include/argparse/argparse.hpp @@ -98,8 +98,10 @@ template std::string repr(T const &val) { out << repr(*val.begin()); std::for_each( std::next(val.begin()), - std::next(val.begin(), - std::min(size, repr_max_container_size) - 1), + std::next( + val.begin(), + static_cast( + std::min(size, repr_max_container_size) - 1)), [&out](const auto &v) { out << " " << repr(v); }); if (size <= repr_max_container_size) { out << " "; @@ -507,7 +509,8 @@ public: if ((dist = static_cast(std::distance(start, end))) >= num_args_min) { if (num_args_max < dist) { - end = std::next(start, num_args_max); + end = std::next(start, static_cast( + num_args_max)); } if (!m_accepts_optional_like_value) { end = std::find_if(start, end, Argument::is_optional); @@ -526,7 +529,8 @@ public: std::for_each(first, last, f); if (!self.m_default_value.has_value()) { if (!self.m_accepts_optional_like_value) { - self.m_values.resize(std::distance(first, last)); + self.m_values.resize( + static_cast(std::distance(first, last))); } } } @@ -729,7 +733,7 @@ private: auto consume_digits = [=](std::string_view s) { // NOLINTNEXTLINE(readability-qualified-auto) auto it = std::find_if_not(std::begin(s), std::end(s), is_digit); - return s.substr(it - std::begin(s)); + return s.substr(static_cast(it - std::begin(s))); }; switch (lookahead(s)) { @@ -1165,7 +1169,7 @@ public: } for (const auto &argument : parser.m_positional_arguments) { - stream.width(longest_arg_length); + stream.width(static_cast(longest_arg_length)); stream << argument; } @@ -1175,7 +1179,7 @@ public: } for (const auto &argument : parser.m_optional_arguments) { - stream.width(longest_arg_length); + stream.width(static_cast(longest_arg_length)); stream << argument; } @@ -1185,7 +1189,7 @@ public: : "\n") << "Subcommands:\n"; for (const auto &[command, subparser] : parser.m_subparser_map) { - stream.width(longest_arg_length); + stream.width(static_cast(longest_arg_length)); stream << command << "\t" << subparser->get().m_description << "\n"; } } diff --git a/include/argparse/test b/include/argparse/test new file mode 100755 index 0000000..e8d4e65 Binary files /dev/null and b/include/argparse/test differ diff --git a/include/argparse/test.cpp b/include/argparse/test.cpp new file mode 100644 index 0000000..8d96354 --- /dev/null +++ b/include/argparse/test.cpp @@ -0,0 +1,15 @@ +#include "argparse.hpp" +#include + +int main(int argc, char *argv[]) { + argparse::ArgumentParser program("test"); + program.add_argument("--foo").implicit_value(true).default_value(false); + program.add_argument("bar"); + + auto unknown_args = + program.parse_known_args({"test", "--foo", "--badger", "BAR", "spam"}); + + assert(program.get("--foo") == true); + assert(program.get("bar") == std::string{"BAR"}); + assert((unknown_args == std::vector{"--badger", "spam"})); +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 543f4b4..b57da7d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -10,7 +10,7 @@ if(MSVC) endif() elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) # Update if necessary - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -Wsign-conversion") endif() if(NOT CMAKE_BUILD_TYPE)