40 lines
825 B
Rust
40 lines
825 B
Rust
//@ run-pass
|
|
|
|
#![feature(final_associated_functions)]
|
|
|
|
trait FinalNoReceiver {
|
|
final fn no_receiver() {}
|
|
}
|
|
|
|
trait FinalGeneric {
|
|
final fn generic<T>(&self, _value: T) {}
|
|
}
|
|
|
|
trait FinalSelfParam {
|
|
final fn self_param(&self, _other: &Self) {}
|
|
}
|
|
|
|
trait FinalSelfReturn {
|
|
final fn self_return(&self) -> &Self {
|
|
self
|
|
}
|
|
}
|
|
|
|
struct S;
|
|
|
|
impl FinalNoReceiver for S {}
|
|
impl FinalGeneric for S {}
|
|
impl FinalSelfParam for S {}
|
|
impl FinalSelfReturn for S {}
|
|
|
|
fn main() {
|
|
let s = S;
|
|
<S as FinalNoReceiver>::no_receiver();
|
|
let obj_generic: &dyn FinalGeneric = &s;
|
|
let obj_param: &dyn FinalSelfParam = &s;
|
|
let obj_return: &dyn FinalSelfReturn = &s;
|
|
obj_generic.generic(1u8);
|
|
obj_param.self_param(obj_param);
|
|
let _ = obj_return.self_return();
|
|
let _: &dyn FinalNoReceiver = &s;
|
|
}
|