Quoting Joern Rennecke <joern.renne...@embecosm.com>:
P.S.:
If we need more than one operation, or mark-things-live when copying during normal operation causes too much overhead, we could select operations to be performed by the copy constructor by adjusting some global state (need not literally be a global variable - it might be a static member variable in some class).
This can also make the mark-operation cheaper, as we could make it just do the marking. And, to tackle GC roots, we could have another templated class to wrap pointers to GC-able pointers that, in addition, has a constructor that registers the address the pointer is going to be stored in. if the previous contents are zero. We'll have to have a check to avoid creating duplicates if a GC root is initialized more than once. Thus, we can get completely get rid of gengtype - the special GC semantics will be expressed in C++ by the types used. The gengtype code might get re-used for a final time to help find and rewrite all the GTY constructs we got in our current code base.