STLアルゴリズムとオーバーロード関数

for_each や transform の述語関数部分に、関数ポインタを指定する場合の話。互いに同じ関数名で、返値や引数のみ異なる関数オーバーロードの一つを指定すると、少なくともVC2005では関数の引数があいまいですなどと言われ、コンパイルは通らない。VC2005だとC2914のエラーになる。
つまり指定した述語の解釈にあたっては、適切なオーバーロード関数をコンパイラが見つけてくれないのである。これはしかし考えてみると当然の話なのである。これはfor_each という関数テンプレートにコンテナの反復子型と述語関数を同時に与えている話なのである。同時にだ。
つまり、テンプレートは、その型パラメータとして任意の型を受け取るように出来ているにもかかわらず、ここで期待しているのは、コンテナの反復子型を受け取り、その型を受け取った上で、同じ並びで3つめに指定した述語関数型についてだけは、その複数あるオーバーロード関数群の中から、最も適切なものを選び出してほしい、ということだ。
そしてそんなしくみは作りようがなく、よってそんな動作も期待できないということになる。なので、この場合は、関数名がオリジナルで一意に定まるようなものを用意して使うようにするしかないという気がしている。