Use SharedPointer as storage object for the variant type container