On Wednesday, 9 August 2017 at 12:47:49 UTC, Steven Schveighoffer
On 8/8/17 3:59 PM, Johan Engelen wrote:
In C++, it is clear that the _caller_ is doing the
dereferencing, and the dereference is also explicit.
In fact it's not doing any dereferencing. It's just under the
hood passing a pointer.
Come on Steven, I thought you knew I am a compiler dev.
The caller _is_ doing dereferencing. That's what the '*' means
semantically and it matters. 
However, the in contract does actually enforce the
And adds null pointer checks even when clearly not needed.
Clearly not needed? I thought the point was to ensure the
reference is not null?
I meant code like this: `k->something(); foo(*k);` or `auto k =
new Klass(); foo(*k);`.
Anyway, the point was to express the intent nicely.
I wasn't expecting having to explain the merits of passing by
 Going off-topic.
The alternative is dereferencing inside the callee (which is
apparently the only option D semantically provides for classes).
I showed the impact of this semantic difference in my DConf 2017
talk; here are links to examples:
It's a pity we are not able to pass classes "by reference" (per
C++ parlance), for reasoning and readability, and performance. I
still have to come up with a rationale for not having an explicit
"*" for classes for when I am going to teach D.