diff options
Diffstat (limited to 'src/test/ui/associated-types/defaults-cyclic-pass-2.rs')
-rw-r--r-- | src/test/ui/associated-types/defaults-cyclic-pass-2.rs | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/src/test/ui/associated-types/defaults-cyclic-pass-2.rs b/src/test/ui/associated-types/defaults-cyclic-pass-2.rs deleted file mode 100644 index 69315a022..000000000 --- a/src/test/ui/associated-types/defaults-cyclic-pass-2.rs +++ /dev/null @@ -1,56 +0,0 @@ -// check-pass - -#![feature(associated_type_defaults)] - -// Having a cycle in assoc. type defaults is okay, as long as there's no impl -// that retains it. -trait Tr { - type A = Vec<Self::B>; - type B = Box<Self::A>; - - fn f(); -} - -// An impl has to break the cycle to be accepted. -impl Tr for u8 { - type A = u8; - - fn f() { - // Check that the type propagates as expected (seen from inside the impl) - let _: Self::A = 0u8; - let _: Self::B = Box::new(0u8); - } -} - -impl Tr for String { - type B = (); - - fn f() { - // Check that the type propagates as expected (seen from inside the impl) - let _: Self::A = Vec::<()>::new(); - let _: Self::B = (); - } -} - -impl Tr for () { - type A = Vec<()>; - type B = u8; - - fn f() { - // Check that the type propagates as expected (seen from inside the impl) - let _: Self::A = Vec::<()>::new(); - let _: Self::B = 0u8; - } -} - -fn main() { - // Check that both impls now have the right types (seen from outside the impls) - let _: <u8 as Tr>::A = 0u8; - let _: <u8 as Tr>::B = Box::new(0u8); - - let _: <String as Tr>::A = Vec::<()>::new(); - let _: <String as Tr>::B = (); - - let _: <() as Tr>::A = Vec::<()>::new(); - let _: <() as Tr>::B = 0u8; -} |