https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111050
--- Comment #5 from TC <rs2740 at gmail dot com> --- Minimal example: $ cat lib1.cpp #include <unordered_set> #include <string> static std::unordered_set<std::string> set; void del(const std::string& s) { set.erase(s); } $ cat lib2.cpp #include <unordered_set> #include <string> static std::unordered_set<std::string> set; void add(const std::string& s) { set.emplace(s); } const std::string& get(const std::string& s) { return *set.find(s); } $ cat main.cpp #include <string> void add(const std::string&); void del(const std::string&); const std::string& get(const std::string&); int main() { add("foo"); del("bar"); (void) get("foo").size(); } $ g++-10 -std=c++17 lib1.cpp -c -o lib1.o $ g++-13 -std=c++17 lib2.cpp -c -o lib2.o $ g++-13 -std=c++17 main.cpp lib1.o lib2.o -o test $ ./test Segmentation fault (core dumped)