On Monday, 10 December 2012 at 12:45:16 UTC, Dan wrote:
That would be an infinite loop. If you have a compile time cycle you would likely need your own custom dups anyway, as you are doing low level and heap allocating already. But for the simpler cases without cycles, if dup encounters a pointer it creates a new instance on the heap (if compilation is possible) and dup's into it.
Wouldn't it be better to do a cycle detection here? I imagine such a thing could be done quite easily by adding every pointer in the original struct to an associative array along with its (new) copy. Then, whenever you encounter a new pointer, you can check if it is already in the AA, and if so use the copy you made before. Of course this has some overhead compared to your suggestion, but it seems to me it would be safe in all cases, which makes more sense with a 'general dup'.