Skip to content

bivariance means that arguments are completely unconstrained #3

Open
@lcnr

Description

@lcnr
struct Foo<T: Trait<Assoc = U>, U>(T);

trait Trait {
    type Assoc;
}

impl Trait for for<'a> fn(&'a ()) {
    type Assoc = String;
}

impl Trait for fn(&'static ()) {
    type Assoc = [usize; 3];
}

fn use_covariance_of_t(x: Foo<for<'a> fn(&'a ()), String>) -> Foo<fn(&'static ()), [usize; 3]> {
    x
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions