On Friday, 17 March 2023 at 22:41:18 UTC, Ali Çehreli wrote:
My comment was purely technical. What I meant is, if the code
is an island where there is no single 'const' in sight, then a
D programmer can live by ignoring 'const'. At a technical
level...
This is different from C++ where you have to use references to
const in order to take rvalue references as parameters. Since D
does not allow binding rvalues even to references to const,
this is a moot point. (-preview=in does bind rvalues to
references as an optimization but that fact is hidden from the
programmer.)
Let's increase the level one bit...
Again we will remain within the boundaries of `-preview=in`, but
we will learn other hidden information. Because you get
interesting results when you raise the issue to function
overloading. Here's what happens when you compile the following
example:
https://wandbox.org/permlink/XvInUjEtMKOS0CVD
1. I guess none of objects are created copy. Because Apple has
already `ref` and Pineapple didn't execute ctor because of `in`
keyword. Isn't Quince also a `const` but it was created when it
is not a copyible object:
ref: Apple
in: Pinapple
const: Quince
0 copies... [Apple: paid, pinapple, quince]
2. If there is no function that takes `ref`, Apple prefers
`const`. Please just hide the function under the version block.
In this case, ctor will run once:
const: Apple
in: Pinapple
const: Quince
1 copies... [qpple, pinapple, quince]
3. If you replace `in` with `scope` (function 3) then pineapple
and quince will also select different functions:
const: Apple
const: Pinapple
in: Quince
2 copies... [qpple, qinapple, puince]
With this example, it is possible to obtain dozens of results
like these. I love D, D is a very powerful language.
SDB@79