I cannot use reference to incomplate (forward declared) class as template for list. But pointer works fine. For what I've read incomplete types are allowed for vector, list and forward list (and not allowed for map, set and others)
Here is example
#include <list>
#include <vector>
class MyClass;
void foo(const MyClass&); //works fine
std::vector<const MyClass&> ref_vec; //error
std::list<const MyClass&> ref_list; //error
std::vector<const MyClass*> p_vec; //works fine
std::list<const MyClass*> p_list; //works fine
class MyClass
{};
void main(){}