1 // Test interaction between unboxed closure sugar and default type
2 // parameters (should be exactly as if angle brackets were used).
3
4 #![feature(unboxed_closures)]
5 #![allow(dead_code)]
6
7 trait Foo<T,V=T> {
8 type Output;
dummy(&self, t: T, v: V)9 fn dummy(&self, t: T, v: V);
10 }
11
same_types(&self, x: &X) -> bool12 trait Eq<X: ?Sized> { fn same_types(&self, x: &X) -> bool { true } }
13 impl<X: ?Sized> Eq<X> for X { }
eq<A: ?Sized,B: ?Sized>() where A : Eq<B>14 fn eq<A: ?Sized,B: ?Sized>() where A : Eq<B> { }
15
test<'a,'b>()16 fn test<'a,'b>() {
17 // Parens are equivalent to omitting default in angle.
18 eq::<dyn Foo<(isize,), Output=()>, dyn Foo(isize)>();
19
20 // In angle version, we supply something other than the default
21 eq::<dyn Foo<(isize,), isize, Output=()>, dyn Foo(isize)>();
22 //~^ ERROR E0277
23
24 // Supply default explicitly.
25 eq::<dyn Foo<(isize,), (isize,), Output=()>, dyn Foo(isize)>();
26 }
27
main()28 fn main() { }
29