out parameter with default value

2014-09-29 Thread AsmMan via Digitalmars-d-learn

Why it does works:

void f(out int c)
{
   if(some_cond)
c = 10;
}

but it doesn't?

void f(out int c = 1)
{
   if(some_cond)
c = 10;
}

it give compiler error:

Error: constant 1 is not an lvalue


Re: out parameter with default value

2014-09-29 Thread AsmMan via Digitalmars-d-learn

My question is why it doesn't works and if there's a workaround


Re: out parameter with default value

2014-09-29 Thread via Digitalmars-d-learn

On Monday, 29 September 2014 at 16:09:11 UTC, AsmMan wrote:

My question is why it doesn't works and if there's a workaround


For the same reason `ref` wouldn't work in this place: It doesn't 
accept rvalues.


A workaround might be to create a global variable that is 
initialized to the value you want, and use this as the default 
value. But this probably isn't what you look for, because you're 
most likely going to overwrite it, so the next time the function 
gets called, it will have a different value.


Re: out parameter with default value

2014-09-29 Thread ketmar via Digitalmars-d-learn
On Mon, 29 Sep 2014 16:07:49 +
AsmMan via Digitalmars-d-learn digitalmars-d-learn@puremagic.com
wrote:

 but it doesn't?
 
 void f(out int c = 1)
'cause `out int c` is actually `int* c`. you can't assign int(1) to
pointer.


signature.asc
Description: PGP signature


Re: out parameter with default value

2014-09-29 Thread AsmMan via Digitalmars-d-learn

I had just forget out and ref are same as pointers... thanks guys


Re: out parameter with default value

2014-09-29 Thread ketmar via Digitalmars-d-learn
On Mon, 29 Sep 2014 20:22:41 +
AsmMan via Digitalmars-d-learn digitalmars-d-learn@puremagic.com
wrote:

 I had just forget out and ref are same as pointers... thanks guys
yeah, that syntactic sugar can be confusing sometimes. ;-)


signature.asc
Description: PGP signature