D has a lot of features which I like very much. And it has a few design decisions that completely kill it for me.
- In D I don’t like making my objects structs, and I don’t like making my objects classes. I would like to have more control over how my type behaves.
- The garbage collector has too much of an impact on the core language and the standard library.
- Everything has shared ownerhsip by default. C++11 introduced features that make it easier to clearly indicate who owns what. D went in the opposite direction.
The issue with all of these is that they are so fundamental to the language that you can not ignore them. In C++ I always have the option to ignore a feature. In D I do not.