Foo
не может иметь переменную-член типа std::unordered_set<Foo>
.
Вы не можете создать экземпляр контейнера стандартной библиотеки с неполным типом. По сути, за некоторыми исключениями, не относящимися к делу, тип класса не завершен до тех пор, пока }
не завершит его определение.
Вам нужно будет либо сохранить в контейнере какой-то другой тип (возможно, std::unique_ptr<Foo>
), либо использовать библиотеку контейнеров, которая предоставляет контейнеры, экземпляры которых могут быть неполными (например, в Boost есть такая библиотека контейнеров).