You misunderstood.
N, M are supposed to be integers (const generics); in your example code you've made them types.
Also, your `type Output = Foo<<N as Add<M>>::Output>;` just means "multiplication has the same return type as addition". But desired is that multiplying a Foo<4> with a Foo<3> results in a Foo<7>.
Rust decided that it's important to not have instantiation-time compiler errors, but this makes computation with const generics complicated: you're not allowed to write Foo<{N+M}> because N+M might overflow, even if it never actually overflows for the generic arguments used in the program.
Instantiation time errors unlock so much metaprogramming potential that Rust is going to be forced to allow them sooner or later.
Re:Rust in QEMU Roadmap
by Ar-Curunir on Tuesday December 03, 2024 @03:32PM
(#42310995)
I believe this kind of stuff is being worked on.
You can though, unless I totally misunderstand your syntax