163 std::unordered_set<std::string> opts_to_remove;
164 std::unordered_set<std::string> unsupported_mandatory_options;
165 std::unordered_set<std::string> unsupported_optional_options;
167 for (
auto it = opts.begin(); it != opts.end();)
169 std::string &name = it->ref(0);
172 const bool remove = name.starts_with(
"-");
175 name.erase(name.begin());
179 const bool optional = name.starts_with(
"?");
182 name.erase(name.begin());
189 unsupported_optional_options.insert(name);
193 unsupported_mandatory_options.insert(name);
200 opts_to_remove.insert(name);
208 opts_to_remove.insert(name);
216 erase_if(*
this, [&opts_to_remove](
const Option &o)
218 const std::string &name = o.
ref(0);
219 return opts_to_remove.contains(name); });
223 update_list.insert(opts_to_remove.begin(), opts_to_remove.end());
225 if (!unsupported_mandatory_options.empty())
227 throw push_update_unsupported_option(
string::join(unsupported_mandatory_options,
","));
230 if (!unsupported_optional_options.empty())