Ah, SO came back just in time.
I am getting a strange error:
\'B::blah\': overriding virtual function return type differs and is not covariant from
Why is that?
Simply because the ISO C++ standard committee ruled it that way!
There is no fundamental reason. It could be done differently, at the cost of a tiny additional compiler complexity.