diff --git a/Source/options.cpp b/Source/options.cpp index fb2c1ab13..228112a43 100644 --- a/Source/options.cpp +++ b/Source/options.cpp @@ -1724,7 +1724,7 @@ std::vector ModOptions::GetEntries() return optionEntries; } -std::vector &ModOptions::GetModEntries() +std::forward_list &ModOptions::GetModEntries() { if (modEntries) return *modEntries; @@ -1738,10 +1738,11 @@ std::vector &ModOptions::GetModEntries() modNames.emplace_back(modName); } - std::vector &newModEntries = modEntries.emplace(); + std::forward_list &newModEntries = modEntries.emplace(); for (auto &modName : modNames) { - newModEntries.emplace_back(modName); + newModEntries.emplace_front(modName); } + newModEntries.reverse(); return newModEntries; } diff --git a/Source/options.h b/Source/options.h index 4431c0730..6f7fc300a 100644 --- a/Source/options.h +++ b/Source/options.h @@ -819,13 +819,17 @@ struct ModOptions : OptionCategoryBase { private: struct ModEntry { + // OptionEntryBase::key references ModEntry::name. + // The implicit copy constructor would copy that reference instead of referencing the copy. + ModEntry(const ModEntry &) = delete; + ModEntry(std::string_view name); std::string name; OptionEntryBoolean enabled; }; - std::vector &GetModEntries(); - std::optional> modEntries; + std::forward_list &GetModEntries(); + std::optional> modEntries; }; struct Options {