Simple implementation of __FUNCTION

Simen Kjaeraas simen.kjaras at gmail.com
Tue Nov 6 02:17:24 PST 2012


On 2012-46-06 08:11, Don Clugston <dac at nospam.com> wrote:

> It fails because you're asking for the full function name, before its  
> type has been determined. (There's no real return type 'auto', 'auto'  
> just means 'work it out for me').
>
> I don't think this is a bug. Although it might be solvable in this  
> particular example, in general it's a circular dependency.
>
> eg, if you do:
>
> auto foo()
> {
>     static if (__FUNCTION == "int foo()") { return 'a' }
>     return 0;
> }
> if __FUNCTION is "int foo()" then it will return a char, which means its  
> signature is "char foo()". This is a contradiction.

DMD already does some cycle detection for types, right? I don't remember
the details, but i seem to recall this was made to work a few releases  
back:

class Foo {
     static if ( is( typeof( Foo.bar ) ) ) {
         void baz() {}
     }
     static if ( true ) {
         int bar() {}
     }
}

The algorithm would probably have to exclude mixins, but I think it could
be made to work for most cases.

-- 
Simen


More information about the Digitalmars-d mailing list