transporting qualifier from parameter to the return value
Walter Bright
newshound1 at digitalmars.com
Tue Dec 15 21:57:59 PST 2009
Steven Schveighoffer wrote:
> type constructor. it has no meaning as a storage class since it's
> entirely transient (it only has any meaning inside functions).
I meant does it only apply at the top level, or does it apply down
inside types?
> BTW, I'm unsure if U[inout(T)] should work.
I just meant it as a compound type. It could as easily be:
bar!(inout(T)) foo(inout X) { ... }
>> This is much more complex to implement than only allowing inout at the
>> top level, i.e. as a storage class.
> A storage class does not give you the transitivity that you need to
> enforce const rules. The inout tag must be carried forth to aliases of
> the same data.
I know, but I know how to make it work. There would be problems, though,
ensuring that this works:
T[] foo(inout T[])
{
return "hello";
}
> What about this?
>
> T[] foo(inout(U)[] p) {...}
>
> Should the return type implicitly be inout(T)[] or inout T[] ?
It would have to be inout(T[])
More information about the Digitalmars-d
mailing list