On Tuesday, 31 March 2015 at 20:07:19 UTC, Walter Bright wrote:
Consider the code:

  struct Foo { C obj; }
  @safe void bar(C c, Foo* f) { f.obj = c; }

Under the proposal, for @safe code, this would have to be written as:

  @safe void bar(static C c, Foo* f) ...


Either that, or:

    @safe void bar(C c return!f, Foo* f) ...

or:

    @safe void bar()(C c, Foo* f) ...

I'm concerned this may break an astonishing amount of code.

We could go a step further and infer scope for all @safe functions, except those with at least one explicit annotation. This would be almost backward compatible, except for the fact that some arguments then suddenly become scope and therefore the mangling changes.

Reply via email to