> multiple inheritance hard to use
Simple pemer: A has two subclasses B and C, from which comes D.
If parent classes have a common ancestor (A), descendant (D) there will be multiple instances of this ancestor. What will work for inherited methods in the General case is unknown. When you cast the pointer D* to A* it is also unclear what he will indicate.
You can fix this by declaring inheritance from A virtual in B and C, but it will be much slower and the initialization of such ancestor have to do with each descendant (B, C, D, and further through the hierarchy), and not only in the direct B, and C. This is not only inconvenient, but does not fit into the PLO. In addition, if A,B, and C declared in a third-party library, such an operation impossible.
> overload using virtual uncomfortable
Can't justify it. I don't think she's uncomfortable. I've always liked.
> exceptions are hard to implement in the compiler, so if we are talking about multiplatform, it's better to forget about them
Forget about them will not work, as they are used in the language (the new operator, for example, uses them). Another thing is that I, for example, they are uncomfortable, but I actually tend to avoid control outputs, and mid functions as, excuse me for being rude, goto statement. In some cases, however, use.
> templates are not the easiest method of generative programming
In my opinion, it is quite simple. Maybe even too much: by using templates it is very easy to inflate the program a lot of similar code.