How to assert a function signature in D2.008?

Craig Black cblack at ara.com
Wed Dec 5 13:17:18 PST 2007


"Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message 
news:fj6par$2gkq$1 at digitalmars.com...
> "Craig Black" wrote
>>
>> "Sean Kelly" <sean at f4.ca> wrote in message 
>> news:fj4e63$1jaa$1 at digitalmars.com...
>>> Walter Bright wrote:
>>>> Janice Caron wrote:
>>>>> This used to compile under D2.007
>>>>>
>>>>>     struct A
>>>>>     {
>>>>>         void f() {}
>>>>>
>>>>>         static assert(is(typeof(f)==void function()));
>>>>>     }
>>>>>
>>>>> It doesn't under D2.008. The only way I've found to make it compile
>>>>> under D2.008 is to change it to
>>>>
>>>> Change it to:
>>>>
>>>> is(typeof(&f)==void function())
>>>
>>> I guess the reason that this matches "void function" rather than "void 
>>> delegate" is to avoid the need for handling each separately?
>>>
>>>
>>> Sean
>>
>> To me this is confusing because you are taking the address of an instance 
>> function without specifying the context pointer.  It doesn't result in a 
>> delegate but it shouldn't result in a function either.  Maybe there 
>> should be another type for "delegate without context pointer".
>>
>> -Craig
>
> It is consistent with other uses of typeof.  typeof is a special compiler 
> directive that says "give me the type of what this instruction would be". 
> It doesn't actually execute the instruction.
>
> And I believe the 'is' operation must be executed by the compiler at 
> compile time anyways.
>
> -Steve

Ok, that makes sense.





More information about the Digitalmars-d mailing list