Am 08.11.2012 02:48, schrieb Walter Bright: > On 11/7/2012 4:03 PM, Andrei Alexandrescu wrote: >> On 11/7/12 10:24 PM, Walter Bright wrote: >>> On 11/7/2012 11:40 AM, Jonas Drewsen wrote: >>>> I we were to allow for @foobar style UDA then "safe" would have to be >>>> a reserved >>>> keyword somehow. Otherwise I do not know what this would mean: >>>> >>>> struct safe { } >>>> @safe void foobar() { } >>> >>> Yes, I agree this is a significant problem. >>> >> >> I think it's solvable. The basic approach would be to plop types "safe", >> "nothrow" etc. in object.di and then let them just behave like all >> other arguments. > > Consider that if we do that, then someone will need to disambiguate with: > > @object.safe > > which is ambiguous: > > @a.b .c x = 3; > > or is it: > > @a .b.c x = 3; > > ? > > Another problem is it pushes off recognition of @safe from the parser to > the semantic analyzer. This has unknown forward reference complications.
In that case $(object.safe) would be required - the shortcut then only works for simple identifiers and would error out going with the second option ("object is not an attribute" or something). Templates basically have the same ambiguity: A!x.y.z