Yes. D metaprogramming is so fucking good that it's easy to do well.
It's really obvious, and even at it's worst it's no worse than C++ (Except much easier to debug due to D's much less fundamentalist type system).
I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.
> I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.
The don't really take the features away, they move the problem to a proper templating/code generation language. These are language neutral so you don't have to learn a different one for each language, they are often more powerful too. IME the code they generate is a lot easier to deal with than templated code.
I was really referring to the error messages, because you can write C++ style templates (e.g. SFINAE) in D but no one does because D was designed properly so it has proper traits etc. C++ style template messages are uncommon but possible, however D is much much easier to debug because the type system is working with you and basically available in the language - in the sense that you can use traits and reflection to work out what went wrong (as opposed to
stdin.
byLineCopy.array.sort!((a, b) => a >b).each!writeln;
This example is everyday code in D, but basically unthinkable in C++ (Possible but try getting it that short without writing your own library). It is also telling that the aesthetic style of the above code (UFCS) is a feature D has had for years but was rejected for inclusion into C++ despite BS backing it.
It's really obvious, and even at it's worst it's no worse than C++ (Except much easier to debug due to D's much less fundamentalist type system).
I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.
But to each their own, etc.