On 12/20/2013 09:42 PM, monarch_dodra wrote:
On Friday, 20 December 2013 at 17:48:03 UTC, Philippe Sigaud wrote:
On Fri, Dec 20, 2013 at 6:33 PM, Francesco Cattoglio
<francesco.cattog...@gmail.com> wrote:
Is there any difference between "is(typeof(<somecode>))" and
__traits(compiles, <somecode>)?
I find the latter cleaner: its intent is more apparent. I use
is(typeof()) only for really testing for type existence.
AFAIK, there is no real difference, but "is(typeof())" is more
"idiomatic" in phobos.
I used is(typeof(...)) as that was used in the original post, but I
think it is actually better to use __traits(compiles,...). The
difference is that typeof will not check if all referenced symbols are
indeed accessible in the given scope. (Currently __traits(compiles, ...)
won't either, but I assume this is a bug.)
Most non-trivial templates that use is(typeof(...)) in the constraint
can be broken. (In the sense that it is possible to instantiate them
even though their body does not compile.)