[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