I think it couldn't possibly work like this: if the map has Base::Key as key_type, you simply cannot put A::Key into it without slicing - the variable i_ is lost.

If the map stored Base::Key* you...