가끔 러스트에서 TMP 같은거 없냐 묻는 분들 계신데 비슷한걸 만들수는 있음(똑같다고는 안함)
variadic generic이 없어서 튜플 다루기가 좀 빡세긴한데 그건 넘어가고 일단 is_same 요 함수만 보자
두 타입이 같은지 컴파일타임에 비교하는 함수고 잘 작동함
근데 이런걸 러스트에서는 거의 안씀
왜냐면 제네릭은 템플릿과는 다르게 아무튼 코드만 맞으면 돌아가는게 아님
러스트에서 제약안걸린 제네릭 인자 타입으로 할수있는건 아무것도 없음
그나마 foo 함수는 인자에 T가 들어가서 Sized 제약이 암시적으로 붙어서 '이동' 하나 가능해짐 참고로 ?Sized면 이동조차 불가능함
러스트에서 is_same같은 분기는 전부 trait이랑 impl 블록으로 나누어지고 타입 시스템의 일부가 됨
뭐 C++쪽이 더 마음에 드는 사람도 있겠지만 적어도 러스트는 TMP 비슷한거 쓰기보다는 트레잇이랑 제네릭으로 다 해먹는다고 보시면 됨
https://youtu.be/BdXWlQsd7RI
러스트는 컴파일은 원래 이렇게 하는 거란 말입니다
킹 갓 러스트
Rust에서도 C++처럼 코드만 맞으면 돌아가게 할 수 있음?
매크로쓰면 가능함