TLDR; this is an attempt to simplify the collection helper code by consolidating underlying raw point and shared pointer to Collection instances to all be shared pointers.
My targeted goal is to eliminate this type handling wherein the function return type is extracted from a function parameter. There are many changes that would be required to do this, and, if they work, would simplify other code complicated by juggling two possible Collection pointer types (raw pointer and shared_ptr).
These are some points in the code of interest to eliminate
I'd like to simplify CollectionPtr as well, which currently handles both raw and shared Collection pointer types.