//@ run-pass | |
// nb: does not impl Default | |
#[derive(Debug, PartialEq)] | |
struct NotDefault; | |
#[derive(Debug, Default, PartialEq)] | |
enum Foo { | |
#[default] | |
Alpha, | |
#[allow(dead_code)] | |
Beta(NotDefault), | |
} | |
// #[default] on a generic enum does not add `Default` bounds to the type params. | |
#[derive(Default)] | |
enum MyOption<T> { | |
#[default] | |
None, | |
#[allow(dead_code)] | |
Some(T), | |
} | |
fn main() { | |
assert!(matches!(Foo::default(), Foo::Alpha)); | |
assert!(matches!(MyOption::<NotDefault>::default(), MyOption::None)); | |
} |