There are two copies of the connected_components function, one in Graph.cpp, the other in graph_util.cpp that do the exact same thing. The compiler did not complain about this because one takes a NodeSetUnordered (aka std::unordered_set) and the other takes an AMGraph::NodeSet (aka std::set). However, making these both phmap::hash_set ends up violating the one definition rule.
We can remove either one. Alternatively, it might be a good idea to just make this a template since it can work with arbitrary set types.