2 problems I can't get my head around

jerro a at a.com
Mon Nov 26 08:43:12 PST 2012


On Monday, 26 November 2012 at 16:32:17 UTC, Manu wrote:
> On 26 November 2012 18:17, Manu <turkeyman at gmail.com> wrote:
>
>> On 26 November 2012 17:44, Adam D. Ruppe 
>> <destructionator at gmail.com>wrote:
>>
>>> On Monday, 26 November 2012 at 15:39:35 UTC, Manu wrote:
>>>
>>>> Properties look like variables. How do I distinguish 
>>>> properties from
>>>> proper variables?
>>>>
>>>
>>> I think this will do it:
>>>
>>> import std.traits;
>>> bool isProperty = (functionAttributes!(S.P) &
>>> FunctionAttributes.property) ? true : false
>>>
>>>
>>>
>>> The way that works in the implementation is checking the 
>>> mangled name of
>>> the function. I wouldn't try anything else because any other 
>>> difference
>>> between a property and a variable is arguably a bug since 
>>> they are supposed
>>> to be mostly interchangable!
>>>
>>
>> That's weird. Why would I call functionAttributes in something 
>> that I
>> can't even identify as a function? That's almost 
>> self-defeating... but as
>> long as functionAttributes will tolerate being called with 
>> basically any
>> argument, function or otherwise, then I guess this is okay...
>>
>
> And fail! functionAttributes breaks when I pass basically 
> anything that's
> not a function >_<

You could use check for isCallable before using 
functionAttributes. I don't know if isCallable is supposed to 
return true for properties once they are fully defined and 
implemented, but it currently does.


More information about the Digitalmars-d mailing list