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