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 :)