is(T == const) for function types
mist
none at none.none
Wed Dec 26 10:05:37 PST 2012
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 :)
More information about the Digitalmars-d-learn
mailing list