# Class ArgParseArgument
Information for a specific command line argument.

Implements | AssignableConcept
All Subcl's | ArgParseOption
All Impl'd | AssignableConcept
Defined in | <seqan/arg_parse.h>
Signature | `class ArgParseArgument`

## Member Function Overview

- `ArgParseArgument::ArgParseArgument(argumentType[, argumentLabel[, isListArgument[, numberOfArgument]]]);`
  Constructor

### Member Functions Inherited From AssignableConcept

- `operator=`

## Interface Function Overview

- `std::string getArgumentLabel(arg);`
  Return argument label.
- `std::string getArgumentType(arg);`
  Return the `ArgParseArgument::ArgumentType`.
- `std::string getArgumentTypeAsString(arg);`
  Return argument type As a string.
- `std::string getArgumentValue(arg[, argNo]);`
  Return the value of the argument.
- `std::vector<std::string> getArgumentValue(arg);`
  Return all values of the argument.
- `std::string getFileExtension(arg[, pos]);`
  Returns the file extension for the given file argument.
- `bool hasValue(arg[, pos]);`
  Return whether a value is available.
- `bool hasDefault(arg);`
  Returns whether the argument has a default value.
- `bool isBooleanArgument(arg);`
  Returns whether the argument is a bool.
- `bool isDirectoryArgument(arg);`
  Returns whether the argument is a directorz argument.
- `bool isDoubleArgument(arg);`
  Returns whether the argument is a double integer.
- `bool isInputFileArgument(arg);`
  Returns whether the argument is a input file.
- `bool isInputPrefixArgument(arg);`
  Returns whether the argument is an input prefix argument.
- `bool isInt64Argument(arg);`
  Returns whether the argument is a 64 bit integer.
- `bool isIntegerArgument(arg);`
  Returns whether the argument is an integer.
- `bool isListArgument(arg);`
  Returns whether the argument can be given more than one time.
- `bool isOutputFileArgument(arg);`
  Returns whether the argument is a output file.
- `bool isOutputPrefixArgument(arg);`
  Returns whether the argument is an output prefix.
- `bool isSet(arg):`
  Returns true if a value was assigned to the argument.
- `bool isStringArgument(arg);`
  Returns whether the argument is a string.
- `unsigned numberOfAllowedValues(arg);`
  Returns the number of allowed values for this ArgParseArgument.
- `void setHelpText(arg, text);`
  Set the help text for an ArgParseArgument.
- `void setMaxValue(arg, maxValue);`
  Set smallest allowed value for the argument.
- `void setMinValue(arg, minValue);`
  Set smallest allowed value for the argument.
- `void setValidValues(arg, values);`
  Set list of valid values.

### Interface Functions Inherited From AssignableConcept

- `assign`
- `set`
- `move`

## Member Functions Detail

### `ArgParseArgument::ArgParseArgument(argumentType[, argumentLabel[, isListArgument[, numberOfArgument]]]);`

Constructor

#### Parameters

`argumentType` | Type of the argument (`ArgParseArgument::ArgumentType`).
`argumentLabel` | Label for the argument (`char const *`).
`isListArgument` | Whether or not this argument can be given multiple times (`bool`).
`numberOfArguments` | Number of times the argument must be given. E.g. set to 2 for the parser to always expect two values (`int`, default is 1).

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

## Interface Functions Detail

### `std::string getArgumentLabel(arg);`

Return argument label.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`std::string` | The argument label as a STL string.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `std::string getArgumentType(arg);`

Return the `ArgParseArgument::ArgumentType`.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`ArgumentType` | The argument type.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `std::string getArgumentTypeAsString(arg);`

Return argument type As a string.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`std::string` | The argument type as a STL string.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `std::string getArgumentValue(arg[, argNo]);`

Return the value of the argument.

#### Parameters

`arg` | The ArgParseArgument to query.
`argNo` | In case that the ArgParseArgument allowed multiple values, give the index of the argument that you want to retrieve (`unsigned`, starts at 0).

#### Returns

`std::string` | Const-reference to the argument value.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `std::vector<std::string> getArgumentValue(arg);`

Return all values of the argument.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`std::vector<std::string>` | Const-reference to the argument values.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `std::string getFileExtension(arg[, pos]);`

Returns the file extension for the given file argument.

#### Parameters

`arg` | The ArgParseArgument to query.
`pos` | The position of the value to retrieve if multiple values (`unsigned`).

#### Returns

`std::string` | The file extension, empty if no extension or not set.

Only valid when argument is an INPUT_FILE or OUTPUT_FILE.

Halts the program if not an input or output file argument.

Can be overridden with special hidden options. For arguments, you can pass `--arg-<num>-file-ext` for argument `num`. For parameters, you can pass `--<param-name>-file-ext` for the option named `param-name`.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool hasValue(arg[, pos]);`

Return whether a value is available.

#### Parameters

`arg` | The ArgParseArgument to query.
`pos` | The position of the argument in case of being a list (`unsigned`, 0-based, default is 0).

#### Returns

`bool` | `true` if `pos` is less than the size and the argument is non-empty.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool hasDefault(arg);`

Returns whether the argument has a default value.

#### Parameters

`arg` | The argument to query.

#### Returns

`bool` | `true` if the argument has a default value and `false` if not.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isBooleanArgument(arg);`

Returns whether the argument is a bool.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a bool, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isDirectoryArgument(arg);`

Returns whether the argument is a directorz argument.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a directory argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isDoubleArgument(arg);`

Returns whether the argument is a double integer.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a double argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isInputFileArgument(arg);`

Returns whether the argument is a input file.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a input file argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isInputPrefixArgument(arg);`

Returns whether the argument is an input prefix argument.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is an input prefix argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isInt64Argument(arg);`

Returns whether the argument is a 64 bit integer.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a 64 bit integer, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isIntegerArgument(arg);`

Returns whether the argument is an integer.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is an integer, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isListArgument(arg);`

Returns whether the argument can be given more than one time.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it can be given multiple times, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isOutputFileArgument(arg);`

Returns whether the argument is a output file.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a output file argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isOutputPrefixArgument(arg);`

Returns whether the argument is an output prefix.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is an output prefix argument, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isSet(arg):`

Returns true if a value was assigned to the argument.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if a value was assigned, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `bool isStringArgument(arg);`

Returns whether the argument is a string.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`bool` | `true` if it is a string, `false` otherwise.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `unsigned numberOfAllowedValues(arg);`

Returns the number of allowed values for this ArgParseArgument.

#### Parameters

`arg` | The ArgParseArgument to query.

#### Returns

`unsigned` | The number of allowed values.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `void setHelpText(arg, text);`

Set the help text for an ArgParseArgument.

#### Parameters

`arg` | The ArgParseArgument to set the help text for.
`text` | The text to display as the description of the argument (`std::string`).

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `void setMaxValue(arg, maxValue);`

Set smallest allowed value for the argument.

#### Parameters

`arg` | The ArgParseArgument to set the smallest value of.
`maxValue` | The largest value to set (`std::string`).

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `void setMinValue(arg, minValue);`

Set smallest allowed value for the argument.

#### Parameters

`arg` | The ArgParseArgument to set the smallest value of.
`minValue` | The smallest value to set (`std::string`).

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `void setValidValues(arg, values);`

Set list of valid values.

#### Parameters

`arg` | The ArgParseArgument to set the valid values for.
`values` | Either a `std::string` containing all valid entries, separated by spaces or a `std::vector<std::string>` with the valid entries.

If the argument is of type string then the list of valid values is the case-sensitive list of string values allowed for this argument. If it is an input or output file then the list of valid values is a list of case-insentive file extensions identifying the allowed types.

#### Examples

An example of setting allowed values for a string option.

    seqan::ArgParseArgument stringArg(seqan::ArgParseArgument::STRING);
    setValidValues(stringArg, "one two three");  // one of {"one", "two", "three"}

    std::vector<std::string> values;
    values.push_back("four");
    values.push_back("five");
    setValidValues(stringArg, values);  // one of {"four", "five"}

An example for an input file option. Note that by changing `INPUT_FILE` to `OUTPUT_FILE` below, the example would be the same for output files.

    seqan::ArgParseArgument fileArg(seqan::ArgParseArgument::INPUT_FILE);
    setValidValues(fileArg, "fq fastq");  // file must end in ".fq" or ".fastq"

    std::vector<std::string> values;
    values.push_back("sam");
    values.push_back("bam");
    setValidValues(fileArg, values);  // file must end in ".sam" or ".bam"

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

#### Dox Sources

    /*!
     * @class ArgParseArgument
     *
     * @implements AssignableConcept
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Information for a specific command line argument.
     *
     * @signature class ArgParseArgument
     *
     * @fn ArgParseArgument::ArgParseArgument
     *
     * @brief Constructor
     *
     * @signature ArgParseArgument::ArgParseArgument(argumentType[, argumentLabel[,
     *            isListArgument[, numberOfArgument]]]);
     *
     * @param[in] argumentType Type of the argument
     *                         (<tt>ArgParseArgument::ArgumentType</tt>).
     * @param[in] argumentLabel Label for the argument (<tt>char const *</tt>).
     * @param[in] isListArgument Whether or not this argument can be given multiple
     *                           times (<tt>bool</tt>).
     * @param[in] numberOfArguments Number of times the argument must be given. E.g.
     *                              set to 2 for the parser to always expect two
     *                              values (<tt>int</tt>, default is 1).
     *
     * @fn ArgParseArgument#isListArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument can be given more than one time.
     *
     * @signature bool isListArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it can be given multiple times, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isBooleanArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a bool.
     *
     * @signature bool isBooleanArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a bool, <tt>false</tt> otherwise.
     *
     * @fn ArgParseArgument#isStringArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a string.
     *
     * @signature bool isStringArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a string, <tt>false</tt> otherwise.
     *
     * @fn ArgParseArgument#isIntegerArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is an integer.
     *
     * @signature bool isIntegerArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is an integer, <tt>false</tt> otherwise.
     *
     * @fn ArgParseArgument#isInt64Argument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a 64 bit integer.
     *
     * @signature bool isInt64Argument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a 64 bit integer, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isDoubleArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a double integer.
     *
     * @signature bool isDoubleArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a double argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isInputFileArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a input file.
     *
     * @signature bool isInputFileArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a input file argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isOutputFileArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a output file.
     *
     * @signature bool isOutputFileArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a output file argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isDirectoryArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is a directorz argument.
     *
     * @signature bool isDirectoryArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is a directory argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isOutputPrefixArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is an output prefix.
     *
     * @signature bool isOutputPrefixArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is an output prefix argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#isInputPrefixArgument
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument is an input prefix argument.
     *
     * @signature bool isInputPrefixArgument(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if it is an input prefix argument, <tt>false</tt>
     *              otherwise.
     *
     * @fn ArgParseArgument#getArgumentType
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return the <tt>ArgParseArgument::ArgumentType</tt>.
     *
     * @signature std::string getArgumentType(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return ArgumentType The argument type.
     *
     * @fn ArgParseArgument#getArgumentTypeAsString
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return argument type As a string.
     *
     * @signature std::string getArgumentTypeAsString(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return std::string The argument type as a STL string.
     *
     * @fn ArgParseArgument#getArgumentLabel
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return argument label.
     *
     * @signature std::string getArgumentLabel(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return std::string The argument label as a STL string.
     *
     * @fn ArgParseArgument#setMinValue
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Set smallest allowed value for the argument.
     *
     * @signature void setMinValue(arg, minValue);
     *
     * @param[in,out] arg The ArgParseArgument to set the smallest value of.
     * @param[in] minValue The smallest value to set (<tt>std::string</tt>).
     *
     * @fn ArgParseArgument#setMaxValue
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Set smallest allowed value for the argument.
     *
     * @signature void setMaxValue(arg, maxValue);
     *
     * @param[in,out] arg The ArgParseArgument to set the smallest value of.
     * @param[in] maxValue The largest value to set (<tt>std::string</tt>).
     *
     * @fn ArgParseArgument#setValidValues
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Set list of valid values.
     *
     * @signature void setValidValues(arg, values);
     *
     * @param[in,out] arg The ArgParseArgument to set the valid values for.
     * @param[in] values Either a <tt>std::string</tt> containing all valid entries,
     *                   separated by spaces or a
     *                   <tt>std::vector&lt;std::string&gt;</tt> with the valid
     *                   entries.
     *
     * If the argument is of type string then the list of valid values is the case-
     * sensitive list of string values allowed for this argument. If it is an input
     * or output file then the list of valid values is a list of case-insentive file
     * extensions identifying the allowed types.
     *
     * @section Examples
     *
     * An example of setting allowed values for a string option.
     *
     * @code{.cpp}
     * seqan::ArgParseArgument stringArg(seqan::ArgParseArgument::STRING);
     * setValidValues(stringArg, "one two three");  // one of {"one", "two", "three"}
     *
     * std::vector<std::string> values;
     * values.push_back("four");
     * values.push_back("five");
     * setValidValues(stringArg, values);  // one of {"four", "five"}
     * @endcode
     *
     *
     * An example for an input file option. Note that by changing
     * <tt>INPUT_FILE</tt> to <tt>OUTPUT_FILE</tt> below, the example would be the
     * same for output files.
     *
     * @code{.cpp}
     * seqan::ArgParseArgument fileArg(seqan::ArgParseArgument::INPUT_FILE);
     * setValidValues(fileArg, "fq fastq");  // file must end in ".fq" or ".fastq"
     *
     * std::vector<std::string> values;
     * values.push_back("sam");
     * values.push_back("bam");
     * setValidValues(fileArg, values);  // file must end in ".sam" or ".bam"
     * @endcode
     *
     *
     * @fn ArgParseArgument#setHelpText
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Set the help text for an ArgParseArgument.
     *
     * @signature void setHelpText(arg, text);
     *
     * @param[in,out] arg The ArgParseArgument to set the help text for.
     * @param[in] text The text to display as the description of the argument
     *                 (<tt>std::string</tt>).
     *
     * @fn ArgParseArgument#getArgumentValue
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return the value of the argument.
     *
     * @signature std::string getArgumentValue(arg[, argNo]);
     *
     * @param[in,out] arg The ArgParseArgument to query.
     * @param[in] argNo In case that the ArgParseArgument allowed multiple values,
     *                  give the index of the argument that you want to retrieve
     *                  (<tt>unsigned</tt>, starts at 0).
     *
     * @return std::string Const-reference to the argument value.
     *
     * @fn ArgParseArgument#getArgumentValues
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return all values of the argument.
     *
     * @signature std::vector<std::string> getArgumentValue(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return std::vector<std::string> Const-reference to the argument values.
     *
     * @fn ArgParseArgument#hasArgumentValue
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Return whether a value is available.
     *
     * @signature bool hasValue(arg[, pos]);
     *
     * @param[in] arg The ArgParseArgument to query.
     * @param[in] pos The position of the argument in case of being a list
     *                (<tt>unsigned</tt>, 0-based, default is 0).
     *
     * @return bool <tt>true</tt> if <tt>pos</tt> is less than the size and the
     *              argument is non-empty.
     *
     * @fn ArgParseArgument#isSet
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns true if a value was assigned to the argument.
     *
     * @signature bool isSet(arg):
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return bool <tt>true</tt> if a value was assigned, <tt>false</tt> otherwise.
     *
     * @fn ArgParseArgument#hasDefault
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns whether the argument has a default value.
     *
     * @signature bool hasDefault(arg);
     *
     * @param[in] arg The argument to query.
     *
     * @return bool <tt>true</tt> if the argument has a default value and
     *              <tt>false</tt> if not.
     *
     * @fn ArgParseArgument#numberOfAllowedValues
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns the number of allowed values for this ArgParseArgument.
     *
     * @signature unsigned numberOfAllowedValues(arg);
     *
     * @param[in] arg The ArgParseArgument to query.
     *
     * @return unsigned The number of allowed values.
     *
     * @fn ArgParseArgument#getFileExtension
     *
     * @headerfile <seqan/arg_parse.h>
     *
     * @brief Returns the file extension for the given file argument.
     *
     * @signature std::string getFileExtension(arg[, pos]);
     *
     * @param[in] arg The ArgParseArgument to query.
     * @param[in] pos The position of the value to retrieve if multiple values
     *                (<tt>unsigned</tt>).
     *
     * @return std::string The file extension, empty if no extension or not set.
     *
     * Only valid when argument is an INPUT_FILE or OUTPUT_FILE.
     *
     * Halts the program if not an input or output file argument.
     *
     * Can be overridden with special hidden options. For arguments, you can pass
     * <tt>--arg-&lt;num&gt;-file-ext</tt> for argument <tt>num</tt>. For
     * parameters, you can pass <tt>--&lt;param-name&gt;-file-ext</tt> for the
     * option named <tt>param-name</tt>.
     */