std.traits.ParameterIdentifierTuple problem

Nick Treleaven nick at geany.org
Sun Mar 31 11:35:39 UTC 2024


On Saturday, 30 March 2024 at 22:37:53 UTC, Carl Sturtivant wrote:
> 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.

Maybe, but one of its unittests specifically tests that a 
function pointer has no parameter identifiers:
```d
     // might be changed in the future?
     void function(int num, string name) fp;
     static assert([ParameterIdentifierTuple!fp] == ["", ""]);
```
And changing in the future got quite a bit of push back in that 
PR link.

This is because `fp` is declared using a function pointer type, 
and the author of the test did not think function pointer types 
should include identifiers. So it seems logical that 
ParameterIdentifierTuple should not give identifiers for a 
function type either.

If a function type does include identifiers, then would two 
function types with the same argument types but different 
identifiers compare equal using `is`?

> 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,

Nice try!

> but the compiler said `bug1.d(5): Error: variable ``bug1.func`` 
> cannot be declared to be a function`. Seems unreasonable given 
> the implied semantics.

Yes, it's not possible to instantiate a function type.



More information about the Digitalmars-d-learn mailing list