ROOT-9784 where the automatic schema evolution was broken, we had to evolve from the old type
to the current/correct type:
Our first attempt was the 'obvious'
but the generated code did not compiled since the type map<TString,ExpensiveObject*> does not exist.
So we updated it to
This now compiled and run until it segfaulted (most often in the execution of the rule).
The reason is that even-though the rule listed a known type with a dictionary when setting up the 'cache' space to store the input, the I/O library used the type as spelled in the on-file StreamerInfo and did not find any dictionary for it (in this case because of the bug in the automatic schema evolution but this could happens in more general cases) and thus emulated the type, here replace the map with an 'emulated' vector<pair<TString, ExpensiveObject*>> which the rule proceeded to use as a map ...
We need to improve TStreamerInfo's handling of I/O customization rules to detect and error-out of this type of cases (and/or insures the that type used in the rule is also used/seen by the allocating TStreamerInfo).