// Can't use unit struct as tuple struct pattern

//@ aux-build:empty-struct.rs

extern crate empty_struct;
use empty_struct::*;

struct Empty2;

enum E {
    Empty4
}

fn main() {
    let e2 = Empty2;
    let e4 = E::Empty4;
    let xe2 = XEmpty2;
    let xe4 = XE::XEmpty4;

    match e2 {
        Empty2() => () //~ ERROR expected tuple struct or tuple variant, found unit struct `Empty2`
    }
    match xe2 {
        XEmpty2() => ()
        //~^ ERROR expected tuple struct or tuple variant, found unit struct `XEmpty2`
    }
    match e2 {
        Empty2(..) => ()
        //~^ ERROR expected tuple struct or tuple variant, found unit struct `Empty2`
    }
    match xe2 {
        XEmpty2(..) => ()
        //~^ ERROR expected tuple struct or tuple variant, found unit struct `XEmpty2`
    }

    match e4 {
        E::Empty4() => ()
        //~^ ERROR expected tuple struct or tuple variant, found unit variant `E::Empty4`
    }
    match xe4 {
        XE::XEmpty4() => (),
        //~^ ERROR expected tuple struct or tuple variant, found unit variant `XE::XEmpty4`
        _ => {},
    }
    match e4 {
        E::Empty4(..) => ()
        //~^ ERROR expected tuple struct or tuple variant, found unit variant `E::Empty4`
    }
    match xe4 {
        XE::XEmpty4(..) => (),
        //~^ ERROR expected tuple struct or tuple variant, found unit variant `XE::XEmpty4`
        _ => {},
    }
}
