It is actually super easy, barely an inconvenience, as long as you know the actual dynamic type at construction time.
For example shared-ptr to base can correctly invoke the correct derived type destructor even if the destructor is not virtual.
Edit: accidentally a word.