On Wednesday, 6 February 2013 at 18:26:17 UTC, Robert wrote:
Making the following code illegal:
import std.stdio;
@safe {
int test1() @system {
int* p=new int;
*p++=8;
return 7;
}
}
So if you Mark code with @safe you can not Mark parts of it to
be @system. This would make things possible like compile time
import of configurations, which would currently impossible in a
safe way.
Agreed, although you can always tighten the code rather than
limit it. @trusted would be the in between cases.
So this would be the behavior?
@system {
int test1() {} //@system
int test1() @safe {} //of course!
int test1() @trusted {} //of course!
a = b;
}
@trusted { //disallowed for (bulk) function/type declarations
//intended only for bits of code or for functions:
//Otherwise an easy unchecked breeding ground for
bugs!
int test1() {} //error
int test1() @safe {} //error
int test1() @system {} //error
int test1() @trusted {} //error, yes it is, even if explicit
a = b;
}
@safe {
int test1() {} //@safe
int test1() @trusted {} //will happen from time to time.
int test1() @system {} //error, cannot weaken code's
restrictions
a = b; //only if safe
}