Linus refusing this in the kernel arguably set it back quite a bit IMO. Lots of the kernel is the kind of "simple" you only get with C i.e. macro hell and lots of repetition.
For example with a proper C++ class you could make /proc/ output a proper format seamlessly whereas with C you basically have to either write a fuckload of scaffolding or just repeat everything.
Also you can write a full book just about C pointers, it's up to the author how far they can stretch it.
N.B. I also am not a huge fan of C++ but certainly for the past 10 years I think it's a net loss not using it.
Linus objected to C++ partly because it has far too much implicit allocation.
If you look at how much surgery is required to make the Rust for Linux alloc work you can see he was quite serious. For example Rust for Linux Vec::push doesn't exist, because if the Vec wasn't big enough that's an implicit allocation, instead Vec::try_push is provided, which is fallible.
There was nobody proposing to even attempt that kind of work for C++.
C++ doesn't have any implicit allocation. The standard library does but that is no-go for the kernel anyway. Doesn't preclude using templates, classes and other C++ features in the kernel - and some external proprietary drivers already do.
Also you can write a full book just about C pointers, it's up to the author how far they can stretch it.
N.B. I also am not a huge fan of C++ but certainly for the past 10 years I think it's a net loss not using it.