規格では最初に見つかった反復子 (Iterator) が返るようになっているため、下記のようなコードには悲しい結果が待っている。
#include#include int main(int, char*) { double data = { 5, 4, 3, 2, 1, 1 }; double* last = data + sizeof(data) / sizeof(data[0]); assert(last - 1 == std::min_element(data, last)); // ここで死ぬ assert(data == std::max_element(data, last)); // これはいいんだけど... return 0; }
人から貰った DLL を使ったプログラムを書いているときに、同じ値が複数含まれる配列を渡すと assert で落っこちるのでソースを見てみたら、上記のようなことをやっていた。みんなも気をつけよう!