TCounter needs to supply following functions: default constructor typedef X Type; where X is an integer type to be used as ID's internal type TCounter::Type GetNextAvailableID() - returns next available ID and advances the internal counter uint32 GetSize() const - returns number of unique IDs created so far OnIndexForced(TCounter::Type Index) - called when given Index has been force-used.