> コールバックの処理が適切なことはテストとかで保証するとか考えると
どのみちテストはやらんと駄目でしょ。と言うか、逆に、
「コールバックの処理が適切なことは『型検査』で保証する」ってのは無理でしょ。
Haskellのキチガイ共はそういう思想らしいが。

「型安全」ってのはバグの一つの形「インタフェース(接続部)の間違い」を検出するだけであって、
処理の中身が間違っている場合は全く検出出来ない。つまりテストは省略出来ない。
それで「型安全」にするために払うコストと、それによって受ける恩恵を考えた場合、
俺にとっては「無いよりマシ」程度で、「投げ捨ててまで」って程の価値はないね。
とはいえtypoを検出する機能だけは欲しいんだが、逆に言えばそれだけで十分だ。

>>160
多分、constで最適化ガーってのはやっぱり無いんだよ。
想定されるケースはそちらの挙げたとおりで、
void someFunc(){
// (A)
hoge(&a, &b); // (B)
// (C)
}
で、(B)で変更されないことを保証されれば、
(A)時点の&a, &bのキャッシュ(というかローカル変数に取ったもの)が
(C)でも有効です、ってだけだが、そもそもこのケースがないだろ。

自関数内で変更してるかどうかはコンパイラには明確に分かるんだから、
考えられるのはこのように他関数をまたいだケースなんだけど、
それなら最初から(A)(C)(B)の順に処理しろ、でしかないし。
((B)で変更されるから(C)は(B)の後ろなのであって)