Simple implementation of __FUNCTION

Don Clugston dac at nospam.com
Mon Nov 5 23:46:46 PST 2012


On 06/11/12 07:09, Rob T wrote:
> On Friday, 2 November 2012 at 22:33:37 UTC, Rob T wrote:
>> I discovered it fails to compile when inside a function with "auto" as
>> the return type.
>>
>> auto test()
>> {
>>    throw new Exception(  mixin(__FUNCTION) );
>>    return 0;
>> }
>>
>> Error: forward reference to test
>>
>> but this works
>>
>> int test()
>> {
>>    throw new Exception(  mixin(__FUNCTION) );
>>    return 0;
>> }
>>
>> So we're kinda sunk for inclusion in phobos unless this error can be
>> resolved.
>>
>> I'll try the enum idea to see if that works.
>>
>> --rt
>
> An update on this problem. I found out that the error when using auto as
> return type has nothing to do with the mixin. The compiler error
> persists when you take mixin out and put in the __traits( ... ) code
> directly.
>
> Does anyone else think that this is a compiler bug? If it is a bug then
> I'll report it in the bug tracker.
>
> --rt

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.







More information about the Digitalmars-d mailing list