mirror of
https://github.com/KeqingMoe/argparse.git
synced 2025-11-28 23:54: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