Se percibe como malvado porque es simplemente más complejo y plantea más problemas de los que la gente suele esperar, especialmente cuando las clases base no son puramente abstractas (no hay miembros de datos). La herencia de diamantes se puede resolver usando herencia virtual, donde se comparte una base común. Y los compiladores pueden detectar colisiones de firmas de métodos. Si se usa bien, puede producir soluciones elegantes y SECAS que de otra forma serían más detalladas para implementar a través de la interfaz y las composiciones/delegaciones.
Una expresión común de MI en C++ es para constructores de envoltorio complejo donde el contructor base debe construirse con objetos miembros no triviales, y como los objetos base deben construirse antes que los objetos miembros, el truco es usar MI (el " base del miembro "idiom."), de lo contrario debe usar una fábrica y más pasos para hacer la construcción como lo hace Java (Java no tiene MI para clases que no son de interfaz).
No tengas miedo y utilízalo cuando sea apropiado (aunque puede llevar algo de práctica detectar un buen ajuste).
No es un problema si necesita D para ambiguate. –