Given this set of toy structs:
struct foo {
    virtual void print() { cout << "foo";  }
};
struct bar : foo {
    virtual void print() { cout << "bar"; }
};
I would like to create a map which:
- Has values which are polymorphic
 - Has values which are non-const
 - Is constructed via 
initalizer_list - Constructs the values within it's 
initializer_list - Is not initialized using secondary functions/lambdas/macros to convert the 
initializer_listinto amap - Does not require a separate cleanup function
 
Thus I can't figure out how to make any of these specializations of map work:
map<int, foo*>map<int, unique_ptr<foo>>map<int, foo&>map<int, foo&&>
The only thing that I have found which will work is map<int, shared_ptr<foo>>. I'm unhappy with this because I don't want to allow shared ownership of the values. But it sounds like this is my only option?