On Wednesday, 29 November 2017 at 21:46:51 UTC, Timon Gehr wrote:
On 29.11.2017 20:49, Steven Schveighoffer wrote:
On 11/29/17 2:01 PM, Timon Gehr wrote:

OK, now I get what you are saying. In the same vein, I tested applying attributes to functions themselves:

@("a") int fun() { return 0; }
pragma(msg, typeof(&fun)); // int function()

@("b") int gun() { return 1; }
pragma(msg, typeof(&gun)); // int function()

void main()
{
   auto f = &fun;
   f = &gun; // works
}

Given that, it seems attributes play no part in the type itself, they are just metadata in the compiler.

Well, I think the case of UDAs on parameters is closer to:

struct S{
    @("a") int x1;
    @("b") int x2;
}

The attributes on x1 and x2 are indeed part of the type S, even if the attributes on S itself are not.

If we go with "UDAs on parameters are not part of the function type", how to you get the UDAs of the parameters of some function?

The function would have to be passed directly to __traits() to get the UDA. If passed to a function, it would have to be via alias:

void func(@attr int param) { }

void test(alias f)()
{
writeln(getParameterAttr!(f, 0)); // or however to implement getting the attribute
}

test!func(); // prints @attr

Reply via email to