44 lines
747 B
Rust
44 lines
747 B
Rust
// check-pass
|
|
|
|
#![feature(return_position_impl_trait_in_trait, lint_reasons)]
|
|
#![allow(incomplete_features)]
|
|
|
|
use std::fmt::Display;
|
|
|
|
pub trait Foo {
|
|
fn bar(&self) -> impl Display;
|
|
}
|
|
|
|
impl Foo for i32 {
|
|
#[expect(refining_impl_trait)]
|
|
fn bar(&self) -> i32 {
|
|
*self
|
|
}
|
|
}
|
|
|
|
impl Foo for &'static str {
|
|
#[expect(refining_impl_trait)]
|
|
fn bar(&self) -> &'static str {
|
|
*self
|
|
}
|
|
}
|
|
|
|
pub struct Yay;
|
|
|
|
impl Foo for Yay {
|
|
#[expect(refining_impl_trait)]
|
|
fn bar(&self) -> String {
|
|
String::from(":^)")
|
|
}
|
|
}
|
|
|
|
fn foo_generically<T: Foo>(t: T) {
|
|
println!("{}", t.bar());
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", "Hello, world.".bar());
|
|
println!("The answer is {}!", 42.bar());
|
|
foo_generically(Yay);
|
|
}
|