diff options
Diffstat (limited to 'src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs')
-rw-r--r-- | src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs b/src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs new file mode 100644 index 000000000..383313902 --- /dev/null +++ b/src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs @@ -0,0 +1,26 @@ +// run-pass +// Tests for RFC 1268: we allow overlapping impls of marker traits, +// that is, traits with #[marker]. In this case, a type `T` is +// `MyMarker` if it is either `Debug` or `Display`. + +#![feature(marker_trait_attr)] + +use std::fmt::{Debug, Display}; + +#[marker] trait MyMarker {} + +impl<T: Debug> MyMarker for T {} +impl<T: Display> MyMarker for T {} + +fn foo<T: MyMarker>(t: T) -> T { + t +} + +fn main() { + // Debug && Display: + assert_eq!(1, foo(1)); + assert_eq!(2.0, foo(2.0)); + + // Debug && !Display: + assert_eq!(vec![1], foo(vec![1])); +} |