どうも C++ の参照型とごっちゃになるが、 Rust で &T
と &&T
は違う型である。ただし
fn foo(x: &usize) -> usize {
*x
}
fn main() {
foo(&&&&x);
}
これは通る。この挙動は Deref coercion によっていて、 Deref for &T
はライブラリ側で定義されている。実は今まで、この coercion は dot 演算子限定で適用されると勘違いしていた。
Deref coercions - The Rust Programming Language
これの一番下だけ読んで勘違いしたのかな。ひどい。
https://github.com/aturon/rfcs/blob/deref-coercions/active/0000-deref-coercions.md