Create constraint for each parameter in template arg pack

bauss jj_1337 at live.dk
Tue Aug 28 13:05:15 UTC 2018


On Tuesday, 28 August 2018 at 12:28:19 UTC, Andrey wrote:
> Hello,
> Let we have two variadic templates:
>> template Qwerty(Values...) {}
>> template Qaz(alias type, Data...) {}
>
> Now I want to add a constraint to "Qwerty" so that each type in 
> "Values" pack must be a "Qaz" template. I don't care about 
> values of "type" or "Data" in "Qaz".
> How to do it in D?

I'm not sure if there is a better way, but isInstanceOf 
(std.traits) seems to work with a static foreach and a static if.

template Qwerty(Values...)
{
     static foreach (value; Values)
     {
         static if (!isInstanceOf!(Qaz, value))
         {
             static assert(0, "Values are not Qaz only ...");
         }
     }

     // ...
}


More information about the Digitalmars-d-learn mailing list