How to check that function gets ref parameter?
Basile B.
b2.tem at gmx.com
Sun Dec 13 19:49:35 UTC 2020
On Sunday, 13 December 2020 at 16:41:06 UTC, Andrey Zherikov
wrote:
> I'm trying to check that function has 'ref' parameter. The only
> way I found so far is to use std.traits.Parameters.
>
> Here is the code I have:
> void f(int) {}
> void g(ref int) {}
> void main()
> {
> writeln(Parameters!f[0].stringof);
> writeln(__traits(isRef, Parameters!f[0]));
> writeln(Parameters!g.stringof);
> writeln(Parameters!g[0].stringof);
> writeln(__traits(isRef, Parameters!g[0]));
> }
>
> The output is:
> int
> false
> (ref int)
> int
> false
>
> "Parameters!g[0]" strips off 'ref' qualifier as you can see.
> How can I make it work?
You use the wrong traits, try ParameterStorageClassTuple instead:
void f(int) {}
void g(ref int) {}
import std.traits : ParameterStorageClass,
ParameterStorageClassTuple;
static assert(ParameterStorageClassTuple!g[0] ==
ParameterStorageClass.ref_);
static assert(ParameterStorageClassTuple!f[0] !=
ParameterStorageClass.ref_);
More information about the Digitalmars-d-learn
mailing list