Rust의 제너릭은 C++의 템플릿처럼 컴파일 타입에 각 타입에 맞는 함수를 생성하고 호출된 위치에 링크한다.

하지만 그냥 C++의 템플릿처럼 어떤 타입인지도 모르고 받아서 덧셈 연산이나 나눗셈 연산 따위를 제너릭 함수에서 할 수 있는 것은 아니고,

타입이 가져야 할 Trait를 지정하여 인자로 들어온 객체의 오퍼레이션을 호출할 수 있다.

fn add<T>(a:&mut T, b:T){
a += b;
}

가령 이런 함수가 있을 때, Rust는 이 함수를 호출하는 곳이 없어도 컴파일 에러를 뿝는다. 왜냐면 제너릭 T에 +=연산자가 지정되어 있는지 모르기 때문이다. 이때 제너릭 T가 AddAsign이라는 Trait가 지정되면 +=연사자의 사용이 가능하다.

fn add<T:std::ops::AddAssign>(a:&mut T, b:T){
*a += b;
}