1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
//! Check that one cannot use arbitrary self types where a generic parameter
//! mismatches with an opaque type. In theory this could unify with the opaque
//! type, registering the generic parameter as the hidden type of the opaque type.
//@ revisions: current next
//@[next] compile-flags: -Znext-solver
#![feature(type_alias_impl_trait, arbitrary_self_types)]
type Foo = impl Copy;
#[derive(Copy, Clone)]
struct Bar<T>(T);
impl Bar<Foo> {
fn bar(self: Bar<u32>) {
//~^ ERROR: invalid `self` parameter
self.foo()
}
fn baz(self: &Bar<u32>) {
//~^ ERROR: invalid `self` parameter
self.foo()
}
}
impl Bar<u32> {
fn foo(self) {}
}
fn foo() -> Foo {
42_u32
}
fn main() {}
|