Is this a bug?

ag0aep6g via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Apr 15 10:43:59 PDT 2016


On 15.04.2016 19:13, Eric wrote:
>    1 alias J = const C;
>    2
>    3 void main(string[] args)
>    4 {
>    5     J a = new C();
>    6     I!(J) i = a;
>    7 }
>    8
>    9 interface I(V) { }
>   10
>   11 class F(V) if (is(V : I!(V))) { }
>   12
>   13 class C : I!(J)
>   14 {
>   15     F!(J) m;
>   16 }
>
> The above code gives the following compile error:
> Error:
> template instance F!(const(C)) does not match template declaration F(V)
> if (is(V : I!V))
> on line 15.
>
> If I change line 1 to "alias J = C;" the code will compile.  The problem
> seems to be
> the template constraint on line 11.  I think the constraint says, "If V
> can be automatically
> converted to I!(V) then this template can be used".  However, line 6
> does not give
> an error, and it seems to be automaticaly converting J to I!(J).

Line 6 isn't accepted either. If you remove the constraint, the compiler 
complains about it. So it's just the next error in line.

And really const C can't be converted to I!(const C) implicitly. The 
former is const, the latter is mutable => no go.


More information about the Digitalmars-d-learn mailing list