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.