Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unsoundness with generic method with enumerated bound #1460

Open
gavinking opened this issue Nov 3, 2015 · 0 comments
Open

unsoundness with generic method with enumerated bound #1460

gavinking opened this issue Nov 3, 2015 · 0 comments
Assignees
Milestone

Comments

@gavinking
Copy link
Member

As seen here, the following code should be rejected by the typechecker:

class Lizt<out Item>() {

    value list = ArrayList<Item>();

    shared Item add<in InItem>(InItem i) 
            given InItem of Item { 
        list.add(i of Item);
        return i of Item; 
    }
}

class Person() {}
class Customer() extends Person(){}

shared void run2() {
    Lizt<Person> people = Lizt<Customer>();
    people.add<Person>(Person()); //Oops!!
}

The enumerated bound is a contravariant location!

Note that we do do the right check for upper bounds.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant