The following code compiles fine with g++-4.4 and causes g++-4.5 to segfault. Removing the assert() or removing the int_less_than parameter no longer lead to a segfault.
% g++-4.5 --version g++-4.5 (Debian 4.5-20091226-1) 4.5.0 20091226 (experimental) [trunk revision 155473] Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % cat bug.cc #include <cassert> #include <set> namespace spot { struct int_less_than { bool operator()(int, int) const { return 0; } }; int f(const std::set<int, int_less_than>&) { assert(0); return 1; } } % g++-4.4 -c bug.cc # 4.4 runs OK % g++-4.5 -c bug.cc g++-4.5: Internal error: Segmentation fault (program cc1plus) Please submit a full bug report. See <file:///usr/share/doc/gcc-4.5/README.Bugs> for instructions. -- Summary: ICE on assert() in function with complex(?) template argument Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: adl at gnu dot org GCC build triplet: i686-linux-gnu GCC host triplet: i686-linux-gnu GCC target triplet: i486-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42758