On Monday, October 29, 2012 11:42:59 Zhenya wrote: > Hi! > > Tell me please,in this code first and second static if,are these > equivalent? > with arg = 1, __traits(compiles,"check(arg);") = true, > is(typeof(check(arg))) = false.
In principle, is(typeof(code)) checks whether the code in there is syntatically and semantically valid but does _not_ check whether the code actually compiles. For instance, it checks for the existence of the symbols that you use in it, but it doesn't check whether you can actually use the symbol (e.g. it's private in another module). __traits(compiles, code) on the other hand specifically checks whether the code will compile (so it takes stuff like access level into account). In general, they're identical, but depending on the symbols used in them, they can be subtly different. And as Philippe points out, neither of them is intended to take strings. They'll pass with the string, but all they'll be checking is that it's a valid string, which would be pretty useless. - Jonathan M Davis