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

Reply via email to