为什么 T 实现 A+B 但不实现特征 C:A+B?

Why does T implement A+B but not trait C: A+B?

我对这个例子感到困惑。即使 i32 实现了所有 Num + One + Zero + PartialOrd + RemAssign + Ord,当我将它们放入特征中以便我可以提供别名时,它也不起作用。

use num_traits::{Num, identities::One, identities::Zero};
use std::cmp::{Ord, PartialOrd};
use std::ops::RemAssign;

pub trait Math: Num + One + Zero + PartialOrd + RemAssign + Ord {}

fn s<T: Num + One + Zero + PartialOrd + Ord + RemAssign>(t: T) {
    unimplemented!();
}

fn ss<T: Math>(t: T) {
    unimplemented!();
}

fn sss() {
    let x: i32 = 5;
    ss(x);
}

Playground

有没有办法强制所有实现 Num + One + Zero + PartialOrd + RemAssign + Ord 的东西都实现 Math

是的,通过添加毯子实现:

impl<T: Num + One + Zero + PartialOrd + RemAssign + Ord> Math for T {}