Borek, do you happen to know which particular classes have broken implementations of the inherited interfaces?
I can't think of any fast way to find them.
If its not very difficult to support those extensions, then fixing them seems like a good idea, wether or not anything is changed with giveInterface.
And if it really is difficult to support the extension the superclass has, then that would make a pretty good case against the design.
With constantly growing code size, i think maintainability of the code is very important. There is plenty of old code in OOFEM already, and being able to remove a huge chunk is something I always strive for.
There are plenty of scenarios where things are quite likely to go wrong due to this.
E.g. If a superclass implements a new interface, which the subclass automatically supports then you would still have to go through all subclasses and manually add this.
And for newcomers, supporting an interface would be as simple as just implementing it, as opposed to adding a new interface type, overloading giveInterface (and check through all superclasses and adding those interfaces as well), followed by casting from the general "Interface" type returned.
There is also plenty of documentation around this, which I know many new developers stumple upon (i know i did before i realized its basically just a dynamic_cast (without the cast)).