diff options
Diffstat (limited to 'src/test/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.rs')
-rw-r--r-- | src/test/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.rs b/src/test/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.rs new file mode 100644 index 000000000..d11d663f1 --- /dev/null +++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.rs @@ -0,0 +1,27 @@ +// Test that the unboxed closure sugar can be used with an arbitrary +// struct type and that it is equivalent to the same syntax using +// angle brackets. This test covers only simple types and in +// particular doesn't test bound regions. + +#![feature(unboxed_closures)] +#![allow(dead_code)] + +use std::marker; + +trait Foo<T> { + type Output; + fn dummy(&self, t: T); +} + +trait Eq<X: ?Sized> { } +impl<X: ?Sized> Eq<X> for X { } +fn eq<A: ?Sized,B: ?Sized +Eq<A>>() { } + +fn main() { + eq::< dyn for<'a> Foo<(&'a isize,), Output=&'a isize>, + dyn Foo(&isize) -> &isize >(); + eq::< dyn for<'a> Foo<(&'a isize,), Output=(&'a isize, &'a isize)>, + dyn Foo(&isize) -> (&isize, &isize) >(); + + let _: dyn Foo(&isize, &usize) -> &usize; //~ ERROR missing lifetime specifier +} |