Create constraint for each parameter in template arg pack

Alex sascha.orlov at gmail.com
Tue Aug 28 13:14:40 UTC 2018


On Tuesday, 28 August 2018 at 13:05:15 UTC, bauss wrote:
> 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 ...");
>         }
>     }
>
>     // ...
> }

https://dlang.org/phobos/std_traits.html#TemplateOf

maybe...


More information about the Digitalmars-d-learn mailing list