Multiple inheritance would make me freeze the last build before it was introduced and never look forward again.
It is the single baddest thing to - out of many - have, as Bjarne Soustrup agrees, in C++.
And we have multiple inheritance through interfaces, which is less likely to cause stupid non-maintainable code.
Look at it in the light of "with" syntax: it causes mayhem, because people start to use it...Never trust programmers...
They tend to forget or not know about scope...
Multiple inheritance - C++ style - is BAD!. Just like "with" is. Multiple inheritance interface style is sane, but we have that already.
There is no sane way to resolve name clashes using C++ other than scoping explicitly. Which renders it useless. If I see it during code reviews, I insist on having that code changed/removed.
[edit]
Note Maciej's management operators (and Sven, he made some contributions if I am not mistaken) work very, very well and I use them a lot in new code.
Dunno. I've never had any problems with "with". At the end it's just namespace feature. You just need to understand, how namespaces work - that's it. If you personally don't understand, how they work =/= they're bad feature. Ambiguities don't just magically appear - you create them. Just don't do it and everything will be fine.
Problem is - I don't need multiple inheritance to do something new. I have existing code, I've been developing for several years. I couldn't just give up - I needed to make it work the way, it was required. And I tried
EVERYTHING, I could try, to avoid any complexity in my code, while keeping it functional - to make it as simple, as clear and as consistent, as possible. And I use class composition in my code anyway, cuz I have no other choice. Nothing can be worse, than class composition. Nothing can be clunkier, slower and less memory inefficient. So, multiple inheritance would actually make my code better.
I.e. code itself requires this feature. Dunno, how to explain it better. That's, how OOP itself was invented. People were using records and passing them as pointers back them. They just wanted to automate their workflow, make code more clear and consistent. Same here.
And... Interfaces actually work exactly the same way, as multiple inheritance - new VMT is created for every interface implemented, filled with wrapper functions, that add deltas to Self pointer. And implementations are "hidden" inside class, that implements this interfaces. Multiple inheritance actually works exactly the same way - you just can keep implementations separated from each other and mix them in any combinations.
Example: this two are equal.
IInterface1 = interface;
IInterface2 = interface;
IInterface3 = interface;
TClass1 = class(TInterfacedObject, IInterface1);
TClass2 = class(TClass1, IInterface2);
TClass3 = class(TClass2, IInterface3);
TFinalClass = TClass3;
class TAbstractClass1;
class TAbstractClass2;
class TAbstractClass3;
class TClass1:TAbstractClass1;
class TClass2:TAbstractClass2;
class TClass3:TAbstractClass3;
class TFinalClass:TClass1, TClass2, TClass3;