[Bug 31] Keyword 'function' and pointer test broken for IsExpression

Oskar Linde oskar.lindeREM at OVEgmail.com
Fri May 5 09:33:54 PDT 2006


Sean Kelly wrote:
> d-bugmail at puremagic.com wrote:
>>>
>>> alias void function() fp;
>>> static if( is( fp == function ) ) printf( "6. function passes\n" );
>>
>> fp is not declared as a function, it is declared as a pointer to a 
>> function. If
>> fp is declared as:
>>     alias void fp();
>> it will 'pass'.
> 
> So how do I test if T is a function pointer?  Currently, I can test if T 
> is a delegate via "if( is(T==delegate) )" but "if( is(T==function) )" 
> clearly has a different meaning.  For example:
> 
>     void delegate() dp;
> 
>     template isDelegate( T )
>     {
>         const bool isDelegate = is( T == delegate );
>     }
> 
>     static assert( isDelegate!(dp) );

I assume you mean isDelegate!(typeof(dp)).

> 
> So far so good, but:
> 
>     void function() fp;
> 
>     template isFunctionPointer( T )
>     {
>         const bool isFunctionPointer = ???;
>     }
> 
>     static assert( isFunctionPointer!(fp) );

Try:

template declare(T) { T declare; }

template isFunctionPointer(T) {
   const bool isFunctionPointer = is( typeof(*declare!(T)) == function);
}

/Oskar



More information about the Digitalmars-d-bugs mailing list