dmd 1.054 and 2.038 release
Steven Schveighoffer
schveiguy at yahoo.com
Fri Jan 1 07:29:21 PST 2010
On Thu, 31 Dec 2009 16:20:08 -0500, Walter Bright
<newshound1 at digitalmars.com> wrote:
> Steven Schveighoffer wrote:
>>> (I'm assuming bug 1961('scoped const') is considered to be fixed).
>> Sadly, it's not fixed yet :(
>> struct S
>> {
>> int x;
>> inout(int)* getX() inout { return &x;}
>> }
>> void main()
>> {
>> S s;
>> int *x = s.getX();
>> }
>> testinout.d(10): Error: function testinout.S.getX () inout is not
>> callable using argument types ()
>> testinout.d(10): Error: cannot implicitly convert expression (s.getX())
>> of type inout(int)* to int*
>> It appears the auto-conversion is not happening on the return, and
>> also the call isn't working.
>
> The inout on the return has to be at the top level, as in inout(int *).
> This probably needs improvement.
Yes, this is an important distinction.
With your recommended change, the error is now:
testinout.d(4): Error: inout on return means inout must be on a parameter
as well for inout inout(int*)()
inout doesn't seem to work with ref either. The only thing I could get to
work is this:
struct S
{
int x;
}
inout(int *) getSX(inout S* s) { return &s.x;}
void main()
{
S s;
const(S)* sp = &s;
int *x = getSX(&s);
//int *y = getSX(sp); // uncomment this line for an error
const(int) *y = getSX(sp);
}
If you uncomment the designated line, the error reads:
testinout.d(13): Error: cannot implicitly convert expression (getSX(sp))
of type const(int*) to int*
which looks good.
-Steve
More information about the Digitalmars-d-announce
mailing list