use std::ops::{Add,Sub,Mul,Div,AddAssign,SubAssign,MulAssign,DivAssign,Neg};
use crate::*;
pub trait ArithmeticCore<Rhs = Self,Output = Self> :
Add<Rhs,Output = Output> +
Sub<Rhs,Output = Output> +
Mul<Rhs,Output = Output> +
Div<Rhs,Output = Output> +
AddAssign<Rhs> +
SubAssign<Rhs> +
MulAssign<Rhs> +
DivAssign<Rhs> +
Neg<Output = Output> +
Power<Rhs,Output = Output> +
Abs +
Gcd +
Zero +
Lcm +
{}
macro_rules! impl_core {
($($t:ty),*) => {
$(
impl ArithmeticCore for $t {}
)*
}
}
impl_core!(i8,i16,i32,i64);
impl_core!(f32,f64);