If the option takes an argument and there are unused characters in the argv
element, then those characters are interpreted as the argument. Otherwise the
next element is taken as the argument. An optional argument must be given in
-the same element.
+the same element if it is given.
Long options begin with a double dash and are identified by an arbitrary
string. An argument can be specified either in the same argv element,
separated by an equals sign, or in the next element. As with short options,
-an optional argument must be in the same element.
+an optional argument, if given, must be in the same element.
A single option may have both alternative forms, but must always have at least
a long form. This is to encourage self-documenting options; it's much easier
/** Adds an option with both short and long forms. Processing depends on
the type of the destination variable and whether an argument is taken or
- not. With an argument, the value is lexical_cast to appropriate type and
- stored in the destination. Without an argument, a bool will be set to true
- and an unsigned will be incremented; any other type will be ignored. */
+ not. With an argument, the value is lexical_cast to the appropriate type
+ and stored in the destination. Without an argument, a bool will be set to
+ true and an unsigned will be incremented; any other type will be ignored. */
template<typename T>
Option &add_option(char s, const std::string &l, T &d, ArgType a = NO_ARG)
{ return add_option(s, l, SimpleStore<T>(d), a); }