cmArgumentParser: Model maybe-empty and non-empty lists with wrapper types
Previously bindings to std::vector<std::string>
required at least one
value. Some clients have been filtering keywordsMissingValue
to
support keywords followed by empty lists. Instead, require clients to
specify whether a keyword's list can be empty as part of the binding
type.
Similarly, model a maybe-missing string with a wrapper type around std::string
.
This work follows !7427 (merged) and !7450 (merged).