mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-05-01 21:23:52 +00:00
The add subcommand function was not exception safe. It added the subcommand to the vector before checking the already added option. This would result in duplicate subcommands being in place in the subcommands_ vector. The modifications make it exception safe and remove what I think was an unnecessary check for pointer duplication, that as far as I can tell was always false since it was comparing a newly created pointer directly to previously created ones.
This commit is contained in:
parent
478f582a71
commit
45496a836a
@ -1080,11 +1080,11 @@ class App {
|
|||||||
|
|
||||||
/// Add a subcommand. Inherits INHERITABLE and OptionDefaults, and help flag
|
/// Add a subcommand. Inherits INHERITABLE and OptionDefaults, and help flag
|
||||||
App *add_subcommand(std::string subcommand_name, std::string description = "") {
|
App *add_subcommand(std::string subcommand_name, std::string description = "") {
|
||||||
subcommands_.emplace_back(new App(description, subcommand_name, this));
|
CLI::App_p subcom(new App(description, subcommand_name, this));
|
||||||
for(const auto &subc : subcommands_)
|
for(const auto &subc : subcommands_)
|
||||||
if(subc.get() != subcommands_.back().get())
|
if(subc->check_name(subcommand_name) || subcom->check_name(subc->name_))
|
||||||
if(subc->check_name(subcommands_.back()->name_) || subcommands_.back()->check_name(subc->name_))
|
throw OptionAlreadyAdded(subc->name_);
|
||||||
throw OptionAlreadyAdded(subc->name_);
|
subcommands_.push_back(std::move(subcom));
|
||||||
return subcommands_.back().get();
|
return subcommands_.back().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user