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