This is a general C++ question, not specific to gcc - probably should be directed to another forum. You tried defining your static member using: "std::set<Thing *,ThingComp> ThingManager::thingSet();" I believe you need to simply use the following (no parens for ctor call - they are implied): "std::set<Thing *,ThingComp> ThingManager::thingSet;"