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