On Tuesday, 9 August 2022 at 21:08:52 UTC, Meta wrote:
(it may also include anything that is a subtype of BigInt... I've received different answers on what exactly `(T: SomeType)` means in this context).

Yes, this syntax allows anything that implicitly converts to `BigInt`; for example:

```d
import std.bigint;

void fun(T : BigInt)(T t)
{
    pragma(msg, "Instantiated with T = `" ~ T.stringof ~ "`");
}

struct S
{
    BigInt n;
    alias n this;
}

void main()
{
    S s;
    fun(s); // Instantiated with T = `S`
}
```

There is currently no way to write a template specialization that requires an exact type, with no implicit conversions. For that, you would have to use a template constraint instead:

```d
void fun(T)(T t)
if (is(T == BigInt))
{
    // ...
}
```

Reply via email to