mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-06-10 09:19:23 +00:00
39 lines
888 B
Rust
39 lines
888 B
Rust
|
// ./src/scope/lifetime/lifetime_bounds.md
|
||
|
|
||
|
|
||
|
use std::fmt::Debug; // Trait to bound with.
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
struct Ref<'a, T: 'a>(&'a T);
|
||
|
// `Ref` contains a reference to a generic type `T` that has
|
||
|
// an unknown lifetime `'a`. `T` is bounded such that any
|
||
|
// *references* in `T` must outlive `'a`. Additionally, the lifetime
|
||
|
// of `Ref` may not exceed `'a`.
|
||
|
|
||
|
// A generic function which prints using the `Debug` trait.
|
||
|
fn print<T>(t: T) where
|
||
|
T: Debug {
|
||
|
println!("`print`: t is {:?}", t);
|
||
|
}
|
||
|
|
||
|
// Here a reference to `T` is taken where `T` implements
|
||
|
// `Debug` and all *references* in `T` outlive `'a`. In
|
||
|
// addition, `'a` must outlive the function.
|
||
|
fn print_ref<'a, T>(t: &'a T) where
|
||
|
T: Debug + 'a {
|
||
|
println!("`print_ref`: t is {:?}", t);
|
||
|
}
|
||
|
|
||
|
fn part0() {
|
||
|
let x = 7;
|
||
|
let ref_x = Ref(&x);
|
||
|
|
||
|
print_ref(&ref_x);
|
||
|
print(ref_x);
|
||
|
}
|
||
|
|
||
|
pub fn main() {
|
||
|
part0();
|
||
|
}
|
||
|
|