Thread overview
How do I the temlate parameter name as string?
Nov 27, 2018
PacMan
Nov 27, 2018
Soulsbane
Nov 27, 2018
Neia Neutuladh
Nov 27, 2018
bauss
November 27, 2018
ParameterIdentifierTuple from std.traits did work fine for regular functions but not for template functions:

> Error: template instance `std.traits.ParameterIdentifierTuple!(f)` does not match template declaration `ParameterIdentifierTuple(func...) if (func.length == 1 && isCallable!func)` (foo)

f is defined as:

> void f(T)(T t, string p)
> if(is(T == A) || is(T == B))
>{
>	// ...
>}

my goal is get "p" as string.
November 27, 2018
On Tuesday, 27 November 2018 at 02:00:44 UTC, PacMan wrote:
> ParameterIdentifierTuple from std.traits did work fine for regular functions but not for template functions:
>
>> Error: template instance `std.traits.ParameterIdentifierTuple!(f)` does not match template declaration `ParameterIdentifierTuple(func...) if (func.length == 1 && isCallable!func)` (foo)
>
> f is defined as:
>
>> void f(T)(T t, string p)
>> if(is(T == A) || is(T == B))
>>{
>>	// ...
>>}
>
> my goal is get "p" as string.
If I'm understanding right I need this quite frequently so I wrote this:

template nameOf(alias nameType)
{
	enum string nameOf = __traits(identifier, nameType);
}

unittest
{
	immutable int name;
	assert(nameOf!name == "name");
}
November 27, 2018
On Tue, 27 Nov 2018 02:00:44 +0000, PacMan wrote:
> f is defined as:
> 
>> void f(T)(T t, string p)
>> if(is(T == A) || is(T == B))
>>{
>>	// ...
>>}
> 
> my goal is get "p" as string.

`f` is a template that generates functions. Before you instantiate that template, the function doesn't exist, so there's no function to get parameters from.

You can get the parameter names of any instantiation of that template, such as:

    assert(ParameterIdentifierTuple!(f!A)[1] == "p");
November 27, 2018
On Tuesday, 27 November 2018 at 02:00:44 UTC, PacMan wrote:
> ParameterIdentifierTuple from std.traits did work fine for regular functions but not for template functions:
>
>> Error: template instance `std.traits.ParameterIdentifierTuple!(f)` does not match template declaration `ParameterIdentifierTuple(func...) if (func.length == 1 && isCallable!func)` (foo)
>
> f is defined as:
>
>> void f(T)(T t, string p)
>> if(is(T == A) || is(T == B))
>>{
>>	// ...
>>}
>
> my goal is get "p" as string.

p.stringof