How to capture a BitFlags type in a function parameter?

Paul Backus snarwin at gmail.com
Sun Jan 31 14:16:15 UTC 2021


On Sunday, 31 January 2021 at 14:04:00 UTC, realhet wrote:
> Hi,
>
> I wan't to process every specialization of the BitFlags struct 
> in a function:
> So far the best I can come up is this:
>
>   static void stdUI(F)(ref F flags) 
> if(F.stringof.startsWith("BitFlags!(")){}
>
> But it's obviously lame.
> If I try this way:
>
>   static void stdUI(E, U)(ref BitFlags!(E, U) flags){}
>
> I get a cannot deduce arguments error.

Your problem is that you are trying to match `U`, a template type 
parameter [1], with BitFlags' `unsafe`, a template value 
parameter [2]. It should work if you change it to:

     static void stdUI(E, Flag!"unsafe" u)(ref BitFlags!(E, u) 
flags) {}

[1] https://dlang.org/spec/template.html#template_type_parameters
[2] https://dlang.org/spec/template.html#template_value_parameter


More information about the Digitalmars-d-learn mailing list