Custom attributes (again)

Timon Gehr timon.gehr at gmx.ch
Tue Apr 10 03:32:00 PDT 2012


On 04/10/2012 12:18 AM, Walter Bright wrote:
> On 4/6/2012 3:49 AM, Timon Gehr wrote:
>> On 04/06/2012 12:23 PM, Walter Bright wrote:
>>> On 4/6/2012 2:54 AM, Timon Gehr wrote:
>>>> Should add additional information to the type Foo. I don't see any
>>>> issues with
>>>> it, and not supporting it would be very strange.
>>>
>>> How would:
>>>
>>> @attr(foo) int x;
>>> int y;
>>>
>>> work? Are x and y the same type or not?
>>
>> Yes, they are.
>>
>> (But a future extension might leave this choice up to 'foo')
>>
>>> Now, consider:
>>>
>>> auto c = b ? x : y;
>>>
>>> What type does c have? int or @attr(foo)int ? And that's really just the
>>> beginning. How about:
>>>
>>> struct S(T) {
>>> T t;
>>> }
>>>
>>> Instantiate it with S!int and S!(@attr(foo)int). Are those the same
>>> instantiation, or different? If the same, does S.t have the attribute or
>>> not?
>>
>> There is no such thing as an @attr(foo) int, because @attr is not a type
>> constructor.
>
> But you said it was added to the *type*.

What I said was that it is added to the declaration. If the declaration 
happens to declare a type, then that must affect the type:

@attr(foo) struct Foo{} // annotate 'foo'

@attr(bar) Foo x;

__traits(getAttributes, typeof(x)); // this will find 'foo', but no 'bar'

__traits(getAttributes, x); // this will find 'bar', but not 'foo'


More information about the Digitalmars-d mailing list