Diamond inheritance isn't a problem in C++ as each inheritance path is followed separately. A small price to pay to enjoy the power of multiple inheritance.
And NULL?
NULL is deprecated since C++ 11 in favor of nullptr.
C++ is old and has only accumulated, never lost.
You may want to have a look at the latest standards.