On Sat, Feb 24, 2018 at 02:54:13AM +0000, Jonathan via Digitalmars-d-learn
> I am having trouble finding many useful explanations of using template
> constraints beyond basic usage.
> I would like to have a template constrant to enforce that a type can
> be explicitly cast to another type:
> void (T)(T t)
> if (cast(int) T)//force `cast(int) T` to be possible
> // Yay I know `t` can be cast to an `int`!
> Is this possible?
void (T)(T t)
if (is(typeof(cast(int) T.init)))
- is(X) generally means "is X a valid type?". It's the usual way of
testing whether something is valid, because an invalid expression will
have no type, and is(X) will return false for it.
- To make use of is(X), generally you want to use typeof to extract the
type of some test expression.
- T.init is the usual D way of saying "give me an instance of type T",
because every type has an .init.
- Putting it together, we have our test object T.init, and our test
expression `cast(int) T.init`, extract the type of that using typeof,
and use the is(...) operator to test whether that type exists.
I think Debian's doing something wrong, `apt-get install pesticide', doesn't
seem to remove the bugs on my system! -- Mike Dresser