On Wednesday, 2 December 2020 at 21:01:22 UTC, Ali Çehreli wrote:
On 12/2/20 12:20 PM, Ferhat Kurtulmuş wrote:
given the function:
export void ceaser_enc(char* input, ref char* output);
this compiles:
char* sezar = (new char[65]).ptr;
ceaser_enc(key, sezar);
this does not compile:
char[] sezar = new char[65];
ceaser_enc(key, sezar.ptr);
by yielding: "cannot pass rvalue argument cast(char*)sezar of
type char* to parameter ref char* output"
Why is sezar an rvalue in the second case?
Not 'sezar' but sezar.ptr is an rvalue. Imagine ptr() being a
function that returns a value:
T* ptr() {
// ...
}
That pointer is an rvalue and D disallows binding them to 'ref'
parameters.
In the first case, 'sezar' is a local variable, which is an
lvalue.
Ali
That makes sense. Thank you.