Attributes on Enum Members: Call for use cases.
Steven Schveighoffer
schveiguy at yahoo.com
Wed Nov 29 19:49:04 UTC 2017
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.
I would say:
>
> struct attribute1{}
> struct attribute2{}
>
> int foo(@attribute1 int x){ return x; }
> int bar(@attribute2 int y){ return y; }
>
> pragma(msg, typeof(&foo)); // int function(@attribute1 int x)?
int function(int)
> pragam(msg, typeof(&bar)); // int function(@attribute2 int x)?
same
>
> auto apply(F,A)(F fun,A arg){
> pragma(msg, F); // ? (instantiations below)
same
> return fun(arg);
> }
>
> void main(){
> apply(&foo,1); // one instantiation
> apply(&bar,1); // second instantiation, or same instance?
same instance
> }
>
> auto weird(){
> int x;
> void foo(@x int y){}
> return &foo;
> }
>
> pragma(msg, typeof(weird())); // ?
void delegate(int)
-Steve
More information about the Digitalmars-d
mailing list