stl の begin, end などは引数が void の関数オーバーロードなのにどうして戻り値が const_iterator か iterator かを判別できるんですか?
使用先で関数を推論しているのかと思い同じような事をしてみたんですが、どうにもうま最適なく関数を絞り込めないようです。