I'm in the process of unrolling a whole big of a mess in our analysis code that people started reporting recently. After some debugging, the issue boiled down to ROOT becoming unable to read std::vector<std::string> branches from a TTree under "certain circumstances".
Attached is a demonstrator.
The fileWriter application writes a simple file/tree with two std::vector<std::string> branches, and the fileReader application tries to read it. This by itself works correctly. But fileReader also calls TClass::GetClass with a "not-quite-correct" name. And when it does that, all hell breaks lose. It does this like:
When building/running the code on top of "root-6.08.06-x86_64-slc6-gcc49-opt", this work as expected. I get the following output:
But when I try to use "root-6.08.06-x86_64-slc6-gcc62-opt", or any newer version that we only have available with GCC 6.2, I get:
As you can imagine, we've just been seeing errors like this StreamerInfo one in our jobs, and it took quite a while to trace back the issue here.
Now, we'll be working on resolving the issue from our side as well, but whatever the underlying issue is that gets ROOT so confused, should also be fixed in the meanwhile.