Extracting user defined attributes on function parameters

Adam D. Ruppe destructionator at gmail.com
Fri Apr 17 16:54:42 UTC 2020


On Friday, 17 April 2020 at 16:40:15 UTC, Jean-Louis Leroy wrote:
> Alas the presence of parameter UDAs breaks 
> std.traits.ParameterDefaults:
>
> import std.traits;
>
> struct attr;
> void f(@attr int);


This part seems fine...

> pragma(msg, ParameterDefaults!f.stringof);

It is this, specifically, that causes the problem. Replace it 
with:

void main() {
         import std.stdio;
         writeln(ParameterDefaults!f.stringof);
}

and it is fine.

So pragma(msg) is doing something really weird, the bug doesn't 
appear to be in Phobos per se, I think it is the compiler doing 
the wrong thing, it seems to me it works inside a function scope 
but not at module scope......


> I'd like to understand why taking a slice of __parameters vs 
> fetching the first element matters. What is the (meta?) type of 
> __parameters[0..1]?

The first element alone becomes a type. The slice maintains the 
magic data inside the compiler; it contains stuff the rest of the 
language cannot express by itself except in parameter lists.

It is weird.

> collapses into a string. Makes me think of wave functions in 
> quantum mechanics ;-)

well it is dependent on when the compiler observes it sooooo lol


More information about the Digitalmars-d-learn mailing list