On 12/12/2011 12:33 AM, deadalnix wrote:
I think you misunderstood the idea. The point was to remove constness of
something passed by value, as long as it possible (native types, pointer
(but not pointee), slices (but not what is in the slice), structs as
long as they have no indirection in them).
Then, should the rule be generalized to include any type that has no
indirections to mutable data?
struct S2
{
immutable(int)* x;
}
struct S
{
string s;
S2 s2;
}
void foo(T)(T s) if (!is(T == immutable)) { }
immutable S s;
foo(s);
The argument is passed by value, the qualifier can be safely removed, so
the call is rewritten to
foo(cast(S)s);
Any potential problems with that?