On Wednesday, 26 December 2012 at 00:47:28 UTC, Ali Çehreli wrote:
On 12/25/2012 04:13 PM, bearophile wrote:
Ali Çehreli:

I don't know the answer but this works:

That difference smells of compiler bug :-)

Bye,
bearophilee

Hmmm. I think the compiler is right. That const that is applied "at the end" in that syntax is I think allowed only for member functions. Otherwise these two work as well:

    // These work:
    const(void delegate()) deleg;
    const void delegate() deleg;

    // This is a compilation error:
    void delegate() const deleg;


Ali

Yes, looks like I was not checking http://dlang.org/declaration.html good enough and assumed C-like model where "Type const var" is as legal as "const Type var". There is a surprising revelation provided by Kenji in context of member variable delegates:

struct Test
{
        void delegate() const deleg;
}

void main()
{
        static if (is(typeof(Test.deleg) F == delegate))
        {
                pragma(msg, "Sure, delegate");
                static assert( is(F == const) );
        }
}

"Delegate type qualifier cannot test directly. You should extract function type from it, then test const." (c) Kenji

Copying it here from github for any possible lucky googlers :)

Reply via email to