So, User-Defined Attributes

Max Samukha maxsamukha at gmail.com
Fri Jan 4 14:03:07 PST 2013


On Friday, 4 January 2013 at 20:40:39 UTC, Walter Bright wrote:
> On 1/4/2013 9:48 AM, Max Samukha wrote:
>> It looks we simply cannot modify existing declarations with 
>> UDAs.
>>
>> @(attr) alias foo = bar; // @(attr) is ignored.
>
> alias provides a way to provide an alternate name for a symbol.

I know what the intended semantics of alias is. But the reality 
is slightly different. See below.

> It wouldn't be an alternate name if it had different 
> attributes. Trying to make such work would have serious 
> semantic consequences.
>
> Hence, no, you cannot use alias to modify the attributes.

You can:

public struct S
{
}

private alias S S2; // visibility attribute is changed.

Type modifiers:

alias const(S) S2; // mutability attribute is changed.

I am not saying that UDAs should be designed so that they could 
modify the aliased "symbols" (that would be a fatality) - just 
noting that alias is already NOT a plain alternative name.


More information about the Digitalmars-d mailing list