On Tuesday, 9 August 2022 at 21:16:22 UTC, Paul Backus wrote:
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`
}

Aha. But isn't that also true for the other declaration?

```d
void fun(BigInt t) { }
```

will also accept anything that implicitly converts to BigInt, no?
So I still don't see the big difference.
Except that is is a template - for what ever that may be useful if it doesn't take more than one type. Relying on something as subtle as this difference does have a code-smell for me.

Reply via email to