Conversely, multiple inheritance is often a very natural fit to some software modeling scenarios, and greater complexity can result in trying to avoid its use.
It is based on generic operations rather than functions, and features anonymous classes, multiple inheritance, a strong error system, setters and locators for operations, and a facility for dynamic binding.
Virtual inheritance ensures that only one instance of a base class exists in the inheritance graph, avoiding some of the ambiguity problems of multiple inheritance.