Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
CLI Namespace Reference

Namespaces

namespace  detail
 
namespace  enums
 
namespace  FailureMessage
 

Classes

class  App
 Creates a command line program, with very few defaults. More...
 
class  ArgumentMismatch
 Thrown when the wrong number of arguments has been received. More...
 
class  AsNumberWithUnit
 
class  AsSizeValue
 
class  BadNameString
 Thrown on construction of a bad name. More...
 
class  Bound
 Produce a bounded range (factory). Min and max are inclusive. More...
 
class  CallForAllHelp
 Usually something like –help-all on command line. More...
 
class  CallForHelp
 -h or –help on command line More...
 
class  CheckedTransformer
 translate named items to other or a value set More...
 
class  Config
 This class provides a converter for configuration files. More...
 
class  ConfigBase
 This converter works with INI/TOML files; to write proper TOML files use ConfigTOML. More...
 
class  ConfigError
 Thrown when extra values are found in an INI file. More...
 
struct  ConfigItem
 Holds values to load into Options. More...
 
class  ConfigTOML
 ConfigTOML generates a TOML compliant output. More...
 
class  ConstructionError
 Construction errors (not in parsing) More...
 
class  ConversionError
 Thrown when conversion call back fails, such as when an int fails to coerce to a string. More...
 
class  CustomValidator
 Class wrapping some of the accessors of Validator. More...
 
class  Error
 All errors derive from this one. More...
 
class  ExcludesError
 Thrown when an excludes option is present. More...
 
class  ExtrasError
 Thrown when too many positionals or options are found. More...
 
class  FileError
 Thrown when parsing an INI file and it is missing. More...
 
class  Formatter
 
class  FormatterBase
 
class  FormatterLambda
 This is a specialty override for lambda functions. More...
 
class  HorribleError
 
class  IncorrectConstruction
 Thrown when an option is set to conflicting values (non-vector and multi args, for example) More...
 
class  InvalidError
 Thrown when validation fails before parsing. More...
 
struct  is_bool
 Check to see if something is bool (fail check by default) More...
 
struct  is_bool< bool >
 Check to see if something is bool (true if actually a bool) More...
 
struct  is_copyable_ptr
 Check to see if something is copyable pointer. More...
 
struct  is_shared_ptr
 Check to see if something is a shared pointer. More...
 
struct  is_shared_ptr< const std::shared_ptr< T > >
 Check to see if something is a shared pointer (True if really a shared pointer) More...
 
struct  is_shared_ptr< std::shared_ptr< T > >
 Check to see if something is a shared pointer (True if really a shared pointer) More...
 
struct  is_vector
 Check to see if something is a vector (fail check by default) More...
 
struct  is_vector< const std::vector< T, A > >
 Check to see if something is a vector (true if actually a const vector) More...
 
struct  is_vector< std::vector< T, A > >
 Check to see if something is a vector (true if actually a vector) More...
 
class  IsMember
 Verify items are in a set. More...
 
struct  IsMemberType
 This can be specialized to override the type deduction for IsMember. More...
 
struct  IsMemberType< const char * >
 The main custom type needed here is const char * should be a string. More...
 
struct  make_void
 A copy of std::void_t from C++17 (helper for C++11 and C++14) More...
 
class  Option
 
class  Option_group
 Extension of App to better manage groups of options. More...
 
class  OptionAlreadyAdded
 Thrown when an option already exists. More...
 
class  OptionBase
 
class  OptionDefaults
 
class  OptionNotFound
 Thrown when counting a non-existent option. More...
 
class  ParseError
 Anything that can error in Parse. More...
 
class  Range
 Produce a range (factory). Min and max are inclusive. More...
 
class  RequiredError
 Thrown when a required option is missing. More...
 
class  RequiresError
 Thrown when a requires option is missing. More...
 
class  RuntimeError
 Does not output a diagnostic in CLI11_PARSE, but allows to return from main() with a specific error code. More...
 
class  Success
 This is a successful completion on parsing, supposed to exit. More...
 
class  Transformer
 Translate named items to other or a value set. More...
 
class  ValidationError
 Thrown when validation of results fails. More...
 
class  Validator
 Some validators that are provided. More...
 

Typedefs

template<bool B, class T = void>
using enable_if_t = typename std::enable_if<B, T>::type
 
template<typename... Ts>
using void_t = typename make_void<Ts...>::type
 A copy of std::void_t from C++17 - same reasoning as enable_if_t, it does not hurt to redefine.
 
template<bool B, class T , class F >
using conditional_t = typename std::conditional<B, T, F>::type
 A copy of std::conditional_t from C++14 - same reasoning as enable_if_t, it does not hurt to redefine.
 
using ConfigINI = ConfigBase
 the default Config is the INI file format
 
using results_t = std::vector<std::string>
 
using callback_t = std::function<bool(const results_t &)>
 callback function definition
 
using Option_p = std::unique_ptr<Option>
 
using App_p = std::shared_ptr<App>
 

Enumerations

enum class  ExitCodes {
  Success = 0 , IncorrectConstruction = 100 , BadNameString , OptionAlreadyAdded ,
  FileError , ConversionError , ValidationError , RequiredError ,
  RequiresError , ExcludesError , ExtrasError , ConfigError ,
  InvalidError , HorribleError , OptionNotFound , ArgumentMismatch ,
  BaseClass = 127
}
 
enum class  AppFormatMode { Normal , All , Sub }
 
enum class  MultiOptionPolicy : char {
  Throw , TakeLast , TakeFirst , Join ,
  TakeAll
}
 Enumeration of the multiOption Policy selection. More...
 
enum class  config_extras_mode : char { error = 0 , ignore , capture }
 enumeration of modes of how to deal with extras in config files More...
 

Functions

std::string fix_newlines (const std::string &leader, std::string input)
 
std::size_t escape_detect (std::string &str, std::size_t offset)
 
std::string & add_quotes_if_needed (std::string &str)
 Add quotes if the string contains spaces.
 
void TriggerOn (App *trigger_app, App *app_to_enable)
 Helper function to enable one option group/subcommand when another is used.
 
void TriggerOn (App *trigger_app, std::vector< App * > apps_to_enable)
 Helper function to enable one option group/subcommand when another is used.
 
void TriggerOff (App *trigger_app, App *app_to_enable)
 Helper function to disable one option group/subcommand when another is used.
 
void TriggerOff (App *trigger_app, std::vector< App * > apps_to_enable)
 Helper function to disable one option group/subcommand when another is used.
 
void deprecate_option (Option *opt, const std::string &replacement="")
 Helper function to mark an option as deprecated.
 
void deprecate_option (App *app, const std::string &option_name, const std::string &replacement="")
 Helper function to mark an option as deprecated.
 
void deprecate_option (App &app, const std::string &option_name, const std::string &replacement="")
 Helper function to mark an option as deprecated.
 
void retire_option (App *app, Option *opt)
 Helper function to mark an option as retired.
 
void retire_option (App &app, Option *opt)
 Helper function to mark an option as retired.
 
void retire_option (App *app, const std::string &option_name)
 Helper function to mark an option as retired.
 
void retire_option (App &app, const std::string &option_name)
 Helper function to mark an option as retired.
 
template<typename T >
using TransformPairs = std::vector<std::pair<std::string, T>>
 definition of the default transformation object
 
const detail::ExistingFileValidator ExistingFile
 Check for existing file (returns error message if check fails)
 
const detail::ExistingDirectoryValidator ExistingDirectory
 Check for an existing directory (returns error message if check fails)
 
const detail::ExistingPathValidator ExistingPath
 Check for an existing path.
 
const detail::NonexistentPathValidator NonexistentPath
 Check for an non-existing path.
 
const detail::IPV4Validator ValidIPV4
 Check for an IP4 address.
 
const detail::PositiveNumber PositiveNumber
 Check for a positive number.
 
const detail::NonNegativeNumber NonNegativeNumber
 Check for a non-negative number.
 
const detail::Number Number
 Check for a number.
 
std::string ignore_case (std::string item)
 Helper function to allow ignore_case to be passed to IsMember or Transform.
 
std::string ignore_underscore (std::string item)
 Helper function to allow ignore_underscore to be passed to IsMember or Transform.
 
std::string ignore_space (std::string item)
 Helper function to allow checks to ignore spaces to be passed to IsMember or Transform.
 

Typedef Documentation

◆ App_p

using CLI::App_p = std::shared_ptr<App>

Definition at line 4607 of file CLI11.hpp.

◆ callback_t

using CLI::callback_t = std::function<bool(const results_t &)>

Definition at line 3329 of file CLI11.hpp.

◆ conditional_t

template<bool B, class T , class F >
using CLI::conditional_t = typename std::conditional<B, T, F>::type

Definition at line 873 of file CLI11.hpp.

◆ ConfigINI

Definition at line 2057 of file CLI11.hpp.

◆ enable_if_t

template<bool B, class T = void>
using CLI::enable_if_t = typename std::enable_if<B, T>::type

A copy of enable_if_t from C++14, compatible with C++11.

We could check to see if C++14 is being used, but it does not hurt to redefine this (even Google does this: https://github.com/google/skia/blob/master/include/private/SkTLogic.h) It is not in the std namespace anyway, so no harm done.

Definition at line 864 of file CLI11.hpp.

◆ Option_p

using CLI::Option_p = std::unique_ptr<Option>

Definition at line 3334 of file CLI11.hpp.

◆ results_t

using CLI::results_t = std::vector<std::string>

Definition at line 3327 of file CLI11.hpp.

◆ TransformPairs

template<typename T >
using CLI::TransformPairs = std::vector<std::pair<std::string, T>>

Definition at line 2780 of file CLI11.hpp.

◆ void_t

template<typename... Ts>
using CLI::void_t = typename make_void<Ts...>::type

Definition at line 870 of file CLI11.hpp.

Enumeration Type Documentation

◆ AppFormatMode

This enum signifies the type of help requested

This is passed in by App; all user classes must accept this as the second argument.

Enumerator
Normal 
All 
Sub 

Definition at line 3167 of file CLI11.hpp.

3167 {
3168 Normal, //< The normal, detailed help
3169 All, //< A fully expanded help
3170 Sub, //< Used when printed as part of expanded subcommand
3171};

◆ config_extras_mode

enum class CLI::config_extras_mode : char
strong
Enumerator
error 
ignore 
capture 

Definition at line 4603 of file CLI11.hpp.

4603: char { error = 0, ignore, capture };

◆ ExitCodes

enum class CLI::ExitCodes
strong

These codes are part of every error in CLI. They can be obtained from e using e.exit_code or as a quick shortcut, int values from e.get_error_code().

Enumerator
Success 
IncorrectConstruction 
BadNameString 
OptionAlreadyAdded 
FileError 
ConversionError 
ValidationError 
RequiredError 
RequiresError 
ExcludesError 
ExtrasError 
ConfigError 
InvalidError 
HorribleError 
OptionNotFound 
ArgumentMismatch 
BaseClass 

Definition at line 539 of file CLI11.hpp.

539 {
540 Success = 0,
544 FileError,
556 BaseClass = 127
557};
Thrown when the wrong number of arguments has been received.
Definition CLI11.hpp:747
Thrown on construction of a bad name.
Definition CLI11.hpp:619
Thrown when extra values are found in an INI file.
Definition CLI11.hpp:804
Thrown when conversion call back fails, such as when an int fails to coerce to a string.
Definition CLI11.hpp:687
Thrown when an excludes option is present.
Definition CLI11.hpp:781
Thrown when too many positionals or options are found.
Definition CLI11.hpp:788
Thrown when parsing an INI file and it is missing.
Definition CLI11.hpp:680
Thrown when an option is set to conflicting values (non-vector and multi args, for example)
Definition CLI11.hpp:591
Thrown when validation fails before parsing.
Definition CLI11.hpp:814
Thrown when an option already exists.
Definition CLI11.hpp:633
Thrown when counting a non-existent option.
Definition CLI11.hpp:831
Thrown when a required option is missing.
Definition CLI11.hpp:710
Thrown when a requires option is missing.
Definition CLI11.hpp:774
This is a successful completion on parsing, supposed to exit.
Definition CLI11.hpp:655
Thrown when validation of results fails.
Definition CLI11.hpp:703

◆ MultiOptionPolicy

enum class CLI::MultiOptionPolicy : char
strong
Enumerator
Throw 

Throw an error if any extra arguments were given.

TakeLast 

take only the last Expected number of arguments

TakeFirst 

take only the first Expected number of arguments

Join 

merge all the arguments together into a single string via the delimiter character default('
')

TakeAll 

just get all the passed argument regardless

Definition at line 3336 of file CLI11.hpp.

3336 : char {
3337 Throw,
3338 TakeLast,
3339 TakeFirst,
3340 Join,
3341 TakeAll
3342};
@ TakeAll
just get all the passed argument regardless
@ TakeFirst
take only the first Expected number of arguments
@ Throw
Throw an error if any extra arguments were given.
@ TakeLast
take only the last Expected number of arguments
@ Join
merge all the arguments together into a single string via the delimiter character default(' ')

Function Documentation

◆ add_quotes_if_needed()

std::string & CLI::add_quotes_if_needed ( std::string & str)
inline

Definition at line 502 of file CLI11.hpp.

502 {
503 if((str.front() != '"' && str.front() != '\'') || str.front() != str.back()) {
504 char quote = str.find('"') < str.find('\'') ? '\'' : '"';
505 if(str.find(' ') != std::string::npos) {
506 str.insert(0, 1, quote);
507 str.append(1, quote);
508 }
509 }
510 return str;
511}
return str
Definition CLI11.hpp:1359

◆ deprecate_option() [1/3]

void CLI::deprecate_option ( App & app,
const std::string & option_name,
const std::string & replacement = "" )
inline

Definition at line 7514 of file CLI11.hpp.

7514 {
7515 auto opt = app.get_option(option_name);
7516 deprecate_option(opt, replacement);
7517}
void deprecate_option(Option *opt, const std::string &replacement="")
Helper function to mark an option as deprecated.
Definition CLI11.hpp:7493
Here is the call graph for this function:

◆ deprecate_option() [2/3]

void CLI::deprecate_option ( App * app,
const std::string & option_name,
const std::string & replacement = "" )
inline

Definition at line 7508 of file CLI11.hpp.

7508 {
7509 auto opt = app->get_option(option_name);
7510 deprecate_option(opt, replacement);
7511}
Here is the call graph for this function:

◆ deprecate_option() [3/3]

void CLI::deprecate_option ( Option * opt,
const std::string & replacement = "" )
inline

Definition at line 7493 of file CLI11.hpp.

7493 {
7494 Validator deprecate_warning{[opt, replacement](std::string &) {
7495 std::cout << opt->get_name() << " is deprecated please use '" << replacement
7496 << "' instead\n";
7497 return std::string();
7498 },
7499 "DEPRECATED"};
7500 deprecate_warning.application_index(0);
7501 opt->check(deprecate_warning);
7502 if(!replacement.empty()) {
7503 opt->description(opt->get_description() + " DEPRECATED: please use '" + replacement + "' instead");
7504 }
7505}
const std::string & get_description() const
Get the description.
Definition CLI11.hpp:4015
std::string get_name(bool positional=false, bool all_options=false) const
Gets a comma separated list of names. Will include / prefer the positional name if positional is true...
Definition CLI11.hpp:4031
Option * description(std::string option_description)
Set the description.
Definition CLI11.hpp:4018
Option * check(Validator validator, const std::string &validator_name="")
Adds a Validator with a built in type name.
Definition CLI11.hpp:3727
Some validators that are provided.
Definition CLI11.hpp:2089
Validator & application_index(int app_index)
Specify the application index of a validator.
Definition CLI11.hpp:2190
Here is the call graph for this function:
Here is the caller graph for this function:

◆ escape_detect()

std::size_t CLI::escape_detect ( std::string & str,
std::size_t offset )
inline

This function detects an equal or colon followed by an escaped quote after an argument then modifies the string to replace the equality with a space. This is needed to allow the split up function to work properly and is intended to be used with the find_and_modify function the return value is the offset+1 which is required by the find_and_modify function.

Definition at line 489 of file CLI11.hpp.

489 {
490 auto next = str[offset + 1];
491 if((next == '\"') || (next == '\'') || (next == '`')) {
492 auto astart = str.find_last_of("-/ \"\'`", offset - 1);
493 if(astart != std::string::npos) {
494 if(str[astart] == ((str[offset] == '=') ? '-' : '/'))
495 str[offset] = ' '; // interpret this as a space so the split_up works properly
496 }
497 }
498 return offset + 1;
499}

◆ fix_newlines()

std::string CLI::fix_newlines ( const std::string & leader,
std::string input )
inline

Add a leader to the beginning of all new lines (nothing is added at the start of the first line). "; " would be for ini files

Can't use Regex, or this would be a subs.

Definition at line 473 of file CLI11.hpp.

473 {
474 std::string::size_type n = 0;
475 while(n != std::string::npos && n < input.size()) {
476 n = input.find('\n', n);
477 if(n != std::string::npos) {
478 input = input.substr(0, n + 1) + leader + input.substr(n + 1);
479 n += leader.size();
480 }
481 }
482 return input;
483}

◆ ignore_case()

std::string CLI::ignore_case ( std::string item)
inline

Definition at line 2918 of file CLI11.hpp.

2918{ return detail::to_lower(item); }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ignore_space()

std::string CLI::ignore_space ( std::string item)
inline

Definition at line 2924 of file CLI11.hpp.

2924 {
2925 item.erase(std::remove(std::begin(item), std::end(item), ' '), std::end(item));
2926 item.erase(std::remove(std::begin(item), std::end(item), '\t'), std::end(item));
2927 return item;
2928}

◆ ignore_underscore()

std::string CLI::ignore_underscore ( std::string item)
inline

Definition at line 2921 of file CLI11.hpp.

2921{ return detail::remove_underscore(item); }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ retire_option() [1/4]

void CLI::retire_option ( App & app,
const std::string & option_name )
inline

Definition at line 7569 of file CLI11.hpp.

7569{ retire_option(&app, option_name); }
void retire_option(App *app, Option *opt)
Helper function to mark an option as retired.
Definition CLI11.hpp:7520
Here is the call graph for this function:

◆ retire_option() [2/4]

void CLI::retire_option ( App & app,
Option * opt )
inline

Definition at line 7545 of file CLI11.hpp.

7545{ retire_option(&app, opt); }
Here is the call graph for this function:

◆ retire_option() [3/4]

void CLI::retire_option ( App * app,
const std::string & option_name )
inline

Definition at line 7548 of file CLI11.hpp.

7548 {
7549
7550 auto opt = app->get_option_no_throw(option_name);
7551 if(opt != nullptr) {
7552 retire_option(app, opt);
7553 return;
7554 }
7555 auto opt2 = app->add_option(option_name, "option has been retired and has no effect")
7556 ->type_name("RETIRED")
7557 ->expected(0, 1)
7558 ->default_str("RETIRED");
7559 Validator retired_warning{[opt2](std::string &) {
7560 std::cout << "WARNING " << opt2->get_name() << " is retired and has no effect\n";
7561 return std::string();
7562 },
7563 ""};
7564 retired_warning.application_index(0);
7565 opt2->check(retired_warning);
7566}
Here is the call graph for this function:

◆ retire_option() [4/4]

void CLI::retire_option ( App * app,
Option * opt )
inline

Definition at line 7520 of file CLI11.hpp.

7520 {
7521 App temp;
7522 auto option_copy = temp.add_option(opt->get_name(false, true))
7526
7527 app->remove_option(opt);
7528 auto opt2 = app->add_option(option_copy->get_name(false, true), "option has been retired and has no effect")
7529 ->type_name("RETIRED")
7530 ->default_str("RETIRED")
7531 ->type_size(option_copy->get_type_size_min(), option_copy->get_type_size_max())
7532 ->expected(option_copy->get_expected_min(), option_copy->get_expected_max())
7533 ->allow_extra_args(option_copy->get_allow_extra_args());
7534
7535 Validator retired_warning{[opt2](std::string &) {
7536 std::cout << "WARNING " << opt2->get_name() << " is retired and has no effect\n";
7537 return std::string();
7538 },
7539 ""};
7540 retired_warning.application_index(0);
7541 opt2->check(retired_warning);
7542}
Creates a command line program, with very few defaults.
Definition CLI11.hpp:4614
Option * add_option(std::string option_name, callback_t option_callback, std::string option_description="", bool defaulted=false, std::function< std::string()> func={})
Definition CLI11.hpp:5099
int get_type_size_max() const
The maximum number of arguments the option expects.
Definition CLI11.hpp:3960
int get_expected_min() const
The number of times the option expects to be included.
Definition CLI11.hpp:3990
int get_expected_max() const
The max number of times the option expects to be included.
Definition CLI11.hpp:3992
int get_type_size_min() const
The minimum number of arguments the option expects.
Definition CLI11.hpp:3958
Option * expected(int value)
Set the number of expected arguments.
Definition CLI11.hpp:3668
bool get_allow_extra_args() const
Get the current value of allow extra args.
Definition CLI11.hpp:3715
Option * allow_extra_args(bool value=true)
Definition CLI11.hpp:3710
Option * type_size(int option_type_size)
Set a custom option size.
Definition CLI11.hpp:4326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TriggerOff() [1/2]

void CLI::TriggerOff ( App * trigger_app,
App * app_to_enable )
inline

Definition at line 7472 of file CLI11.hpp.

7472 {
7473 app_to_enable->disabled_by_default(false);
7474 app_to_enable->enabled_by_default();
7475 trigger_app->preparse_callback([app_to_enable](std::size_t) { app_to_enable->disabled(); });
7476}
App * disabled_by_default(bool disable=true)
Set the subcommand to be disabled by default, so on clear(), at the start of each parse it is disable...
Definition CLI11.hpp:4945
App * enabled_by_default(bool enable=true)
Definition CLI11.hpp:4956
App * preparse_callback(std::function< void(std::size_t)> pp_callback)
Definition CLI11.hpp:4883
App * disabled(bool disable=true)
Disable the subcommand or option group.
Definition CLI11.hpp:4939
Here is the call graph for this function:

◆ TriggerOff() [2/2]

void CLI::TriggerOff ( App * trigger_app,
std::vector< App * > apps_to_enable )
inline

Definition at line 7479 of file CLI11.hpp.

7479 {
7480 for(auto &app : apps_to_enable) {
7481 app->disabled_by_default(false);
7482 app->enabled_by_default();
7483 }
7484
7485 trigger_app->preparse_callback([apps_to_enable](std::size_t) {
7486 for(auto &app : apps_to_enable) {
7487 app->disabled();
7488 }
7489 });
7490}
Here is the call graph for this function:

◆ TriggerOn() [1/2]

void CLI::TriggerOn ( App * trigger_app,
App * app_to_enable )
inline

Definition at line 7451 of file CLI11.hpp.

7451 {
7452 app_to_enable->enabled_by_default(false);
7453 app_to_enable->disabled_by_default();
7454 trigger_app->preparse_callback([app_to_enable](std::size_t) { app_to_enable->disabled(false); });
7455}
Here is the call graph for this function:

◆ TriggerOn() [2/2]

void CLI::TriggerOn ( App * trigger_app,
std::vector< App * > apps_to_enable )
inline

Definition at line 7458 of file CLI11.hpp.

7458 {
7459 for(auto &app : apps_to_enable) {
7460 app->enabled_by_default(false);
7461 app->disabled_by_default();
7462 }
7463
7464 trigger_app->preparse_callback([apps_to_enable](std::size_t) {
7465 for(auto &app : apps_to_enable) {
7466 app->disabled(false);
7467 }
7468 });
7469}
Here is the call graph for this function:

Variable Documentation

◆ ExistingDirectory

const detail::ExistingDirectoryValidator CLI::ExistingDirectory

Definition at line 2492 of file CLI11.hpp.

◆ ExistingFile

const detail::ExistingFileValidator CLI::ExistingFile

Definition at line 2489 of file CLI11.hpp.

◆ ExistingPath

const detail::ExistingPathValidator CLI::ExistingPath

Definition at line 2495 of file CLI11.hpp.

◆ NonexistentPath

const detail::NonexistentPathValidator CLI::NonexistentPath

Definition at line 2498 of file CLI11.hpp.

◆ NonNegativeNumber

const detail::NonNegativeNumber CLI::NonNegativeNumber

Definition at line 2507 of file CLI11.hpp.

◆ Number

const detail::Number CLI::Number

Definition at line 2510 of file CLI11.hpp.

◆ PositiveNumber

const detail::PositiveNumber CLI::PositiveNumber

Definition at line 2504 of file CLI11.hpp.

◆ ValidIPV4

const detail::IPV4Validator CLI::ValidIPV4

Definition at line 2501 of file CLI11.hpp.