mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-30 12:43:52 +00:00
Correcting the logic for sized types in vectors
This commit is contained in:
parent
5fe44fc713
commit
3cb75b903e
@ -560,12 +560,18 @@ class Option : public OptionBase<Option> {
|
|||||||
local_result = !callback_(partial_result);
|
local_result = !callback_(partial_result);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// For now, vector of non size 1 types are not supported but possibility included here
|
// Exact number required
|
||||||
if((get_items_expected() > 0 && results_.size() != static_cast<size_t>(get_items_expected())) ||
|
if(get_items_expected() > 0) {
|
||||||
(get_items_expected() < 0 && results_.size() < static_cast<size_t>(-get_items_expected())))
|
if(results_.size() != static_cast<size_t>(get_items_expected()))
|
||||||
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
|
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
|
||||||
else
|
// Variable length list
|
||||||
local_result = !callback_(results_);
|
} else if(get_items_expected() < 0) {
|
||||||
|
// Require that this be a multiple of expected size and at least as many as expected
|
||||||
|
if(results_.size() < static_cast<size_t>(-get_items_expected()) ||
|
||||||
|
results_.size() % static_cast<size_t>(std::abs(get_type_size())) != 0)
|
||||||
|
throw ArgumentMismatch(get_name(), get_items_expected(), results_.size());
|
||||||
|
}
|
||||||
|
local_result = !callback_(results_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(local_result)
|
if(local_result)
|
||||||
|
@ -1593,5 +1593,5 @@ TEST_F(TApp, RepeatingMultiArgumentOptions) {
|
|||||||
|
|
||||||
app.reset();
|
app.reset();
|
||||||
args.pop_back();
|
args.pop_back();
|
||||||
ASSERT_THROW(run(), CLI::ValidationError);
|
ASSERT_THROW(run(), CLI::ArgumentMismatch);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user