Fix template parameter
Meta
jared771 at gmail.com
Tue Aug 9 21:08:52 UTC 2022
On Monday, 8 August 2022 at 12:02:02 UTC, Dom Disc wrote:
> Hello.
> I found in the documentation functions declared like this:
>
> ```D
> pure @nogc @safe BigInt opAssign(T : BigInt)(T x);
> ```
This is a template function, even if T is constrained to always
be BigInt (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). This means that it cannot be
virtual, you can't take its address, and as bauss said, it won't
show up in the object file if it's not used.
As far as I know, there's no advantage to doing this over
`opAssign(BigInt x)`, UNLESS `(T: BigInt)` means "BigInt and any
subtype of BigInt", in which case the advantage is similar to
doing `<T extends BigInt> void opAssign(T val)` in Java
(referring to polymorphism; this won't give you virtual dispatch
like it does in Java).
More information about the Digitalmars-d-learn
mailing list