Summary: inout is allowed on fields
           Product: D
           Version: D2
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Steven Schveighoffer <> 2011-10-05 
06:48:16 PDT ---
inout cannot be allowed to be an attribute for fields, since inout is
implicitly cast at the end of an inout function.

With this allowance, I can obtain a mutable pointer to an inout field, even
though it should be treated as const:

struct S
    inout(int) x;

    inout(int)* foo() inout
        return &x;

void main()
    S s;
    auto xp =;
    *xp = 3;
    assert(s.x == 3);

inout should be a temporary condition, only allowed for stack-stored types. 
But fields can be placed outside the stack, since you can place any struct or
class outside the stack.

Alternatively, you could be able to declare a struct field as inout, and then
not allow that struct type to ever be placed anywhere but the stack.  But I do
not see a good use case for that feature.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to