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?