// This test checks that genuine type errors with partial
// type hints are understandable.

use std::marker::PhantomData;

struct Foo<T>(PhantomData<T>);
struct Bar<U>(PhantomData<U>);

pub fn main() {
}

fn test1() {
    let x: Foo<_> = Bar::<usize>(PhantomData);
    //~^ ERROR mismatched types
    //~| expected struct `Foo<_>`
    //~| found struct `Bar<usize>`
    //~| expected struct `Foo`, found struct `Bar`
    let y: Foo<usize> = x;
}

fn test2() {
    let x: Foo<_> = Bar::<usize>(PhantomData);
    //~^ ERROR mismatched types
    //~| expected struct `Foo<_>`
    //~| found struct `Bar<usize>`
    //~| expected struct `Foo`, found struct `Bar`
}
