On 8/17/21 11:11 AM, james.p.leblanc wrote:

> auto foo(T)(T a, T b) { ... }
>
> Now, suppose I need to restrict "T" only certain subsets of variable types.

There are template constraints:

import std.traits;

auto foo(T)(T a, T b)
if (isArray!T) {
  // ...
}

auto foo(T)(T a, T b)
if (isFloatingPoint!T)
{
  // ...
}

void main() {
  foo(1.5, 2.5);
}

See __traits as well and of course you can use any compile-time check in the template constraint.

> I can imagine putting in some "static if" statements in my function body,

That method can display an intelligible error message if there is only one template implementation. Template constraints on the other hand, are not errors; they just determine what template implementations are available for instantiation for the used parameters.

And of course, 'static if' has more uses other than just error reporting; which might be performed better with 'static assert'.

Ali

Reply via email to