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

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


On 10/30/2012 01:43 AM, Jonathan M Davis wrote:
> 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
>

wtf.


More information about the Digitalmars-d-learn mailing list