2013/3/14 deadalnix <deadalnix@gmail.com>
It is a tempting idea, but do not work. Consider :

void delegate() immutable a;
const void delegate() b = a;

This would be forbidden as covariance of function parameters and transitivity act in opposite directions.

You are misunderstanding about delegate type syntax and transitivity.

1. This qualifier for delegate type should be added after parameter types.

const void delegate() b;   // bad, typeof(b) == const(void deelgate())
void delegate() const b;   // good, b can hold const method

2. A delegate which has immutable context cannot implicitly convertible to const context delegate.

In general, if a delegate can implicitly convertible to another, there should be _contravariance_ of parameter types.

void delegate() immutable a;
void delegate() const b;
b = a;  // bad
a = b;  // good

Kenji Hara