The answer to this was that there were children that did not define this function. The pure virtual requires that every possible logic chain end in a defined function, so it was as easy as ensuring that all children had clone() properly defined.