Nick Sabalausky wrote:
Is there an idiom, preferably D1, to detect whether or not the code is currently executing as a ctfe?

Ie:

void foo()
{
    (static?) if( ???? )
    {
        // Run-time code here
        // that does stuff the CTFE engine chokes on
    }
    else
    {
        // CTFE code here
        // that might not be ideal, but at least works as CTFE
    }
}



Not currently, but you can use the following hack, which exploits a bug with CTFE (if the bug gets fixed then the code below won't work):

----
import tango.io.Stdout;

bool isCtfe()
{
        void test( char[] str )
        {
                str[0] = 'b';
        }
        char[] a = "foo".dup;
        test(a);
        if( a == "boo" )
                return false;
        return true;
}

const ctfe = isCtfe();

void main()
{
        Stdout.formatln( "CTFE: {}; Runtime: {};", ctfe, isCtfe() );
}
----

Reply via email to