はじめに 最近、emscriptenのval.hのRustラッパーを書いていたのですが、Rustのgenerics周りを触っていて少し引っかかったところがあり、Qiitaに集うRustaceanの皆さんにも聞いてほしくて筆を取りました。 サンプルコード fn foo<T>() { use std::sync::{Once, ONCE_INIT}; static INIT: Once = ONCE_INIT; INIT.call_once(|| { // run initialization here println!("Called"); }); } fn main() { foo::<i64>(); foo::<i64>(); foo::<isize>(); } このとき、println!は何回呼ばれるでしょうか?実は、一回しか呼ばれません。 どう気持ち悪いか なぜわたしはこれを気持ち悪