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