latest

Generic Bounds

In the Limitations section, we explained that operators are overloaded to work with references and non-references.

If you wish to write generic functions which use operators with mixed reference and non-reference, it might get tricky at first to specify the trait bounds. This page should serve as a *cookbook* to help you.

operation

trait bound

`T $op T`

`T: $Op<T, Output=T>`

`T $op &T`

`T: for<'a> $Op<&'a T, Output=T>`

`&T $op T`

`for<'a> &'a T: $Op<T, Output=T>`

`&T $op &T`

`for<'a> &'a T: $Op<&'a T, Output=T>`

Example

use core::ops::Add;

/// This function can be called with both FHE types and native types

fn compute_stuff<T>(a: T, b: T) -> T

where T: Add<T, Output=T>,

T: for <'a> Add<&'a T, Output=T>,

for <'a> &'a T: Add<T, Output=T> + Add<&'a T, Output=T>

{

let c = &a + &b;

c + &b

}

fn main() {

let result = compute_stuff(0u32, 1u32);

println!("result: {}", result);

}

Last modified 2mo ago

Export as PDF

Copy link