[−][src]Macro auto_ops::impl_op_ex_commutative
Overloads a binary operator commutatively using the given closure as its body. Generates overloads for both owned and borrowed variants where possible.
See impl_op_commutative!
for usage.
Expands borrowed inputs to both borrowed and owned variants.
ⓘThis example deliberately fails to compile
impl_op_ex_commutative!(op |a: &LHS, b: &RHS| -> OUT {...}); // where LHS != RHS
gets expanded to
ⓘThis example deliberately fails to compile
impl_op!(op |a: &LHS, b: &RHS| -> OUT {...}); impl_op!(op |a: &LHS, b: RHS| -> OUT {...}); impl_op!(op |a: LHS, b: &RHS| -> OUT {...}); impl_op!(op |a: LHS, b: RHS| -> OUT {...}); impl_op!(op |a: &RHS, b: &LHS| -> OUT {...}); impl_op!(op |a: &RHS, b: LHS| -> OUT {...}); impl_op!(op |a: RHS, b: &LHS| -> OUT {...}); impl_op!(op |a: RHS, b: LHS| -> OUT {...});
Examples
use auto_ops::impl_op_ex_commutative; impl_op_ex_commutative!(+ |a: &DonkeyKong, b: &DiddyKong| -> i32 { a.bananas + b.bananas }); impl_op_ex_commutative!(+ |a: &DonkeyKong, b: i32| -> i32 { a.bananas + b }); fn main() { let total_bananas = &DonkeyKong::new(5) + &DiddyKong::new(1); assert_eq!(6, total_bananas); let total_bananas = &DonkeyKong::new(5) + DiddyKong::new(1); assert_eq!(6, total_bananas); let total_bananas = DonkeyKong::new(5) + &DiddyKong::new(1); assert_eq!(6, total_bananas); let total_bananas = DonkeyKong::new(5) + DiddyKong::new(1); assert_eq!(6, total_bananas); let total_bananas = &DiddyKong::new(1) + &DonkeyKong::new(5); assert_eq!(6, total_bananas); let total_bananas = &DiddyKong::new(1) + DonkeyKong::new(5); assert_eq!(6, total_bananas); let total_bananas = DiddyKong::new(1) + &DonkeyKong::new(5); assert_eq!(6, total_bananas); let total_bananas = DiddyKong::new(1) + DonkeyKong::new(5); assert_eq!(6, total_bananas); let total_bananas = &DonkeyKong::new(5) + 1; assert_eq!(6, total_bananas); let total_bananas = DonkeyKong::new(5) + 1; assert_eq!(6, total_bananas); let total_bananas = 1 + &DonkeyKong::new(5); assert_eq!(6, total_bananas); let total_bananas = 1 + DonkeyKong::new(5); assert_eq!(6, total_bananas); }