Re: Why is the "in" storage class missing from the ParameterStorageClass enum?
On 01/20/11 21:57, Andrej Mitrovic wrote: > On 1/21/11, Jonathan M Davis wrote: >> Umm. in is never the default. in is essentially an alias for const scope. >> The >> default is non-shared and mutable. >> >> - Jonathan M Davis >> > > That's what I thought. But I did saw it mentioned in this NG a couple > of times, I can't remember by who though. > > In any case, "in" seems to be missing from that enum definition. So > unless there's a specific reason for its absence, I'd file an > enhancement request. It's possible someone was talking about D1 where 'in' meant something very different, and was in fact the default. -- Chris N-S
Re: Why is the "in" storage class missing from the ParameterStorageClass enum?
Andrej Mitrovic wrote: > On 1/21/11, Jonathan M Davis wrote: >> Umm. in is never the default. in is essentially an alias for const scope. >> The >> default is non-shared and mutable. >> >> - Jonathan M Davis >> > > That's what I thought. But I did saw it mentioned in this NG a couple > of times, I can't remember by who though. > > In any case, "in" seems to be missing from that enum definition. So > unless there's a specific reason for its absence, I'd file an > enhancement request. It's not needed because it should resolve to SCOPE for ParameterStorageClass and const is not a storage class, but a type constructor.
Re: Why is the "in" storage class missing from the ParameterStorageClass enum?
On 1/21/11, Jonathan M Davis wrote: > Umm. in is never the default. in is essentially an alias for const scope. > The > default is non-shared and mutable. > > - Jonathan M Davis > That's what I thought. But I did saw it mentioned in this NG a couple of times, I can't remember by who though. In any case, "in" seems to be missing from that enum definition. So unless there's a specific reason for its absence, I'd file an enhancement request.
Re: Why is the "in" storage class missing from the ParameterStorageClass enum?
On Thursday, January 20, 2011 19:03:09 Andrej Mitrovic wrote: > import std.stdio; > import std.traits; > > alias ParameterStorageClassTuple STCTuple; > alias ParameterStorageClass STC; > > void foo(in int[] x) { /*x[0] = 5; // This would be a compile-time error*/ > } void bar(int[] x) { x[0] = 5; } > > void main() > { > assert(STCTuple!foo[0] == STC.NONE); > assert(STCTuple!bar[0] == STC.NONE); > } > > Someone said that "in" was the default storage class when there is no > storage class specified for a parameter. But if that is true then how come > bar can modify the contents of the x parameter? If parameters really have > "in" as the default storage class, bar's function body would be a compile > time error, just like foo's is if you uncomment its code. (Yes, I know a > fat pointer is passed in with both functions. But "in" is supposed to give > some guarantees as to what you can do with a parameter.) > > So, which part of this am I misunderstanding here? Umm. in is never the default. in is essentially an alias for const scope. The default is non-shared and mutable. - Jonathan M Davis
Why is the "in" storage class missing from the ParameterStorageClass enum?
import std.stdio; import std.traits; alias ParameterStorageClassTuple STCTuple; alias ParameterStorageClass STC; void foo(in int[] x) { /*x[0] = 5; // This would be a compile-time error*/ } void bar(int[] x) { x[0] = 5; } void main() { assert(STCTuple!foo[0] == STC.NONE); assert(STCTuple!bar[0] == STC.NONE); } Someone said that "in" was the default storage class when there is no storage class specified for a parameter. But if that is true then how come bar can modify the contents of the x parameter? If parameters really have "in" as the default storage class, bar's function body would be a compile time error, just like foo's is if you uncomment its code. (Yes, I know a fat pointer is passed in with both functions. But "in" is supposed to give some guarantees as to what you can do with a parameter.) So, which part of this am I misunderstanding here?