Choosing between __traits(compiles, { ... } ) and is(typeof( { ... } ))
Stefan Koch
uplink.coder at googlemail.com
Wed Sep 20 12:20:18 UTC 2017
On Wednesday, 20 September 2017 at 12:01:21 UTC, Nordlöw wrote:
> When is
>
> __traits(compiles, { ... } )
>
> preferred over
>
> is(typeof( { ... } ))
>
> and vice versa when writing stuff like
>
> enum isCopyable(S) = is(typeof( { S foo = S.init; S copy =
> foo; } ));
>
> ?
>
> Further, are there cases where the two idioms aren't
> exchangable?
Yes there are.
Prefer __traits(compiles) it includes stricter visibility checks
then is() does.
Also compiles does not require the expression to resolve to a
type.
More information about the Digitalmars-d-learn
mailing list