__traits(compiles,...) <=> ? is(typeof(...))

Timon Gehr timon.gehr at gmx.ch
Mon Oct 29 16:29:22 PDT 2012


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.



More information about the Digitalmars-d-learn mailing list