]> git.lizzy.rs Git - rust.git/blob - src/test/ui/marker_trait_attr/overlap-permitted-for-annotated-marker-traits.rs
Rollup merge of #106043 - c410-f3r:moar-errors, r=petrochenkov
[rust.git] / src / test / ui / marker_trait_attr / overlap-permitted-for-annotated-marker-traits.rs
1 // run-pass
2 // Tests for RFC 1268: we allow overlapping impls of marker traits,
3 // that is, traits with #[marker]. In this case, a type `T` is
4 // `MyMarker` if it is either `Debug` or `Display`.
5
6 #![feature(marker_trait_attr)]
7
8 use std::fmt::{Debug, Display};
9
10 #[marker]
11 trait MyMarker {}
12
13 impl<T: Debug> MyMarker for T {}
14 impl<T: Display> MyMarker for T {}
15
16 fn foo<T: MyMarker>(t: T) -> T {
17     t
18 }
19
20 fn main() {
21     // Debug && Display:
22     assert_eq!(1, foo(1));
23     assert_eq!(2.0, foo(2.0));
24
25     // Debug && !Display:
26     assert_eq!(vec![1], foo(vec![1]));
27 }