[Issue 12570] cast to template interface
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Apr 13 20:43:16 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=12570
Vladimir Panteleev <thecybershadow at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |thecybershadow at gmail.com
Resolution|--- |INVALID
--- Comment #1 from Vladimir Panteleev <thecybershadow at gmail.com> ---
No, it should not be allowed.
Consider the following extension of your example:
////////////////////////////////
import std.stdio;
interface A {}
interface B(T : A) : A
{
// Add a method that accepts a T value.
void foo(T c);
}
class C_a : A {}
class B_a : B!C_a
{
// Implement this method in B_a.
void foo(C_a c);
}
// Add another class which descends from the A interface.
class X_a : A {}
void main()
{
B_a b = new B_a;
// Let's imagine that the compiler allowed this.
B!A b_a = b;
// Now, create an X_a.
X_a x = new X_a;
// This will be allowed!
b_a.foo(x);
writeln(b_a);
}
////////////////////////////////
The line "b_a.foo(x);" calls B_a.foo, which takes a C_a parameter, with an X_a
parameter, which is actually an unrelated type. So, this would break the type
system.
--
More information about the Digitalmars-d-bugs
mailing list