// Test that binary operators consume their arguments use std::ops::{Add, Sub, Mul, Div, Rem, BitAnd, BitXor, BitOr, Shl, Shr}; fn add, B>(lhs: A, rhs: B) { lhs + rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn sub, B>(lhs: A, rhs: B) { lhs - rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn mul, B>(lhs: A, rhs: B) { lhs * rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn div, B>(lhs: A, rhs: B) { lhs / rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn rem, B>(lhs: A, rhs: B) { lhs % rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn bitand, B>(lhs: A, rhs: B) { lhs & rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn bitor, B>(lhs: A, rhs: B) { lhs | rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn bitxor, B>(lhs: A, rhs: B) { lhs ^ rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn shl, B>(lhs: A, rhs: B) { lhs << rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn shr, B>(lhs: A, rhs: B) { lhs >> rhs; drop(lhs); //~ ERROR use of moved value: `lhs` drop(rhs); //~ ERROR use of moved value: `rhs` } fn main() {}