On Friday, 15 May 2015 at 16:08:31 UTC, Adam D. Ruppe wrote:
The scope storage class means you promise not to escape any
reference to the data. This isn't enforced but it is similar in
concept to Rust's borrowed pointers - it may someday be
implemented to be an error to store them in an outside variable.
Only use 'in' if you are looking at the data, but not modifying
or storing copies of pointers/references to it anywhere in any
way.
I expected the compiler forbids 'in' params escaping.
struct MyStruct {
this(int a) {
this.a = a;
}
int a;
}
const(MyStruct)* globalPtr;
void main(string[] args) {
MyStruct ms = MyStruct(10);
foo(ms);
ms.a = 12;
writeln("global: ", *globalPtr); // prints const(MyStruct)(12)
}
void foo(in ref MyStruct ms) {
globalPtr = &ms; // is it legal?
}