Not sure about the virtual inheritance 4th case, I've never used virtual inheritance.
It is not used very often, but it solves a nasty problem of inheritance trees. See the article in Wikipedia for a description of the problem.
The standard libraries use it in several places, such as the I/O libraries.
Other than that, I have only seen it used a handful of times over decades of programming.