VectorMap<String, String> h;
const Index<String>& x = h.GetKeys();
This innocent looking code is broken in a very tricky way: GetKeys returns a reference to Vector<String> which is then picked by Index constructor to perform a conversion to Index<String> (in reality, there should have been h.GetIndex() instead...).
Because I have spent some bad amount of time trying to figure out what is happening, I have decided to disallow this conversion path by making Index constructor from Vector explicit. Now this will probably break some code (but not much of it), e.g. in theide, following line is now invalid:
Index<String> x = Split("hello;world", ';');
and has to be rewritten as
Index<String> x(Split("hello;world", ';'));
but I think it is still better to make this issue safer...