mirror of
https://github.com/KeqingMoe/argparse.git
synced 2025-07-04 07:04:39 +00:00
Before this change: 1. When the input is built-in string literal or cv-`char*`, `is_optional` constructs temporary `std::string` while `mNames` initializer is also constructing `std::string` due to the use of `std::initializer_list`. 2. When the input is `std::string_view`, doesn't compile. 3. When the input is `std::string`, `mNames` initializer moves `args`. If argument name is longer than `std::string`'s SSO buffer, bad thing will happen because `is_optional` will be accessing `args` in moved-from states. Because of the use of `strtol` which expects nul-terminated input, `is_*` series functions must take `std::string`. This restriction may be removed after AppleClang adds `<charconv>`. But for now, it complicates the patch. My solution is to create an array prvalue still, but use a array reference rather than `std::initializer_list` to refer to it, so that the code in delegated constructor can keep using fold expressions after the necessary `std::string` objects being created. |
||
---|---|---|
.. | ||
.gitignore | ||
catch.hpp | ||
CMakeLists.txt | ||
main.cpp | ||
README.md | ||
test_actions.hpp | ||
test_compound_arguments.hpp | ||
test_container_arguments.hpp | ||
test_help.hpp | ||
test_invalid_arguments.hpp | ||
test_issue_37.hpp | ||
test_negative_numbers.hpp | ||
test_optional_arguments.hpp | ||
test_parent_parsers.hpp | ||
test_parse_args.hpp | ||
test_positional_arguments.hpp | ||
test_required_arguments.hpp | ||
test_utility.hpp | ||
test_value_semantics.hpp |
Argparse Tests
Linux
$ mkdir build
$ cd build
$ cmake ../.
$ make
$ ./tests
Windows
- Generate Visual Studio solution
$ mkdir build
$ cd build
$ cmake ../. -G "Visual Studio 15 2017"
- Open ARGPARSE.sln
- Build tests in RELEASE | x64
- Run tests.exe