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'

Reply via email to