On Tuesday, October 30, 2012 00:29:22 Timon Gehr wrote: > On 10/30/2012 12:17 AM, Jonathan M Davis wrote: > > On Monday, October 29, 2012 23:38:34 Timon Gehr wrote: > >> On 10/29/2012 12:03 PM, Jonathan M Davis wrote: > >>> 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). > >>> ... > >> > >> Accessing private symbols is always illegal, even within typeof > >> expressions.> > > As I understand it, that's not supposed to be the case. is(typeof(T.init)) > > tests for existance not for compilability, and private symbols are fully > > visible by everything that imports the module that they're in. They're > > just > > not accessible. I completely agree that it would be better for them to be > > hidden as well, but it doesn't work that way right now, and no one has > > been > > able to convince Walter that it should. > > ... > > That is a different issue.
But as long as private symbols are visible, they should work with is(typeof(blah)), because it's testing for their existence, not whether they can be used or not.. - Jonathan M Davis