const Propagation

evenex via Digitalmars-d digitalmars-d at puremagic.com
Mon Dec 29 12:07:08 PST 2014


On Monday, 29 December 2014 at 16:48:46 UTC, Julian Kranz wrote:

> Is that really cool? I mean, is wise to have the compiler treat 
> templates and non-templates differently? C++ has tons of such 
> inconsistencies which is the main reason I don't really like 
> C++...

Well, it is reasonable in light of the fact that templates 
require the source to be available (which guarantees the compiler 
can analyze it) while regular functions might not be (e.g. if 
they are in a precompiled library). In this sense, making a 
function into a zero-param template is equivalent to telling the 
compiler that it is free to analyze the source.
That being said, I sympathize with the sentiment - it would be 
more consistent if all functions whose source was available could 
be auto-annotated. I'm not sure what the technical impediments to 
this might be, though. Still, adding an extra () to the function 
signature is not too inconvenient, and carries some additional 
benefits.
I find annotations and qualifiers to be part of the "ugly" side 
of D, and try to avoid using them (took me awhile to figure out 
that C++ style const-correctness doesn't work in D, due to 
transitivity) but I'm afraid don't know enough about compilers to 
make a more informed judgement than "that's just how it is." 
Maybe someone with more experience in this area could weigh in?


More information about the Digitalmars-d mailing list