std.traits.ParameterIdentifierTuple problem

Carl Sturtivant sturtivant at gmail.com
Sat Mar 30 22:37:53 UTC 2024


On Saturday, 30 March 2024 at 21:07:35 UTC, Nick Treleaven wrote:
> Although `.stringof` on a function type does include the 
> parameter names, the names are not really part of the type - 
> see:
> https://github.com/dlang/phobos/pull/3620#issuecomment-288469685
>
> Perhaps `ParameterIdentifierTuple` should give a compile error 
> when given a function type.

I'm inclined to a view that keeps more "it just works" options 
open. Regard the parameter names as a part of the type (which I 
am very grateful for them being currently) and just regard part 
of the definition of "type equality" as being to ignore parameter 
names when comparing types.

With this viewpoint, ParameterIdentifierTuple should be repaired 
to work with function types just as it works with functions, and 
the current behavior is a bug.

Incidentally, I tried
```D
extern typeof(foo) func;
```
to say that func was an actual function (`extern` so defined 
elsewhere) whose type was the type of the function `int foo(int 
num, string name, int);` so I can then use 
`ParameterIdentifierTuple` on a function, not a type, but the 
compiler said `bug1.d(5): Error: variable ``bug1.func`` cannot be 
declared to be a function`. Seems unreasonable given the implied 
semantics.



More information about the Digitalmars-d-learn mailing list