Нарвался на эту ошибку в gcc. Просьба приложить патч: http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=159677 testcase: #include <algorithm> struct Size { operator int() { return 0; } private: void operator=(Size&); }; template int* std::fill_n (int*, Size, const int&); template int* std::generate_n (int*, Size, int (*)()); int main () { }
Патч выглядит безобидным, можно было бы и приложить. В апстримной ветке gcc-4_5-branch после выпуска 4.5.4 коммитов не было, очевидно, эта ветка закрыта год назад. Зато в gcc-4_6-branch, в которой находится обсуждаемый фикс на bits/stl_algobase.h и bits/stl_algo.h, есть еще много разных полезных фиксов, возможно, с побочными эффектами. Лучше, конечно, пользоваться более свежими компиляторами.
gcc4.5-4.5.4-alt2 -> sisyphus: * Thu Jul 18 2013 Dmitry V. Levin <ldv@altlinux> 4.5.4-alt2 - libstdc++4.5-devel: backported upstream fix for gcc#25306 (closes: #29186).