まぁ当たり前のことなのですけれど……。
1
std::vector<float> x; std::transform(x.begin(), x.end(), x.begin(), std::log); // error
log はオーバーロード関数なので、どの関数を呼ぶべきかコンパイラが判断できずにエラーになってしまいます。しかし、 int を渡しているならわかるのですが、このくらいならなんとかしてほしいなと思ってしまいます。
キャストしたり logf 関数を使うなどすることで回避できます。
2
void f(int* ptr) {} int main() { boost::function<void(int*)> func = boost::bind(f, 0); // error return 0; }
普通の関数呼び出し f(0) であれば 0 はポインタとして解釈してくれるのですが、 bind をかますと int になってしまうようです。
void f(int* ptr) {} int main() { int* null = 0; boost::function<void(int*)> func = boost::bind(f, null); return 0; }
などとしなければなりません。これは nullptr ができれば解決するのかな? (よくわかってません)