Compiling the following code causes an internal compiler error on both: gcc (GCC) 4.1.2 20061115 (prerelease) (SUSE Linux) & gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)
#include <string> #include <typeinfo> template<class FILTER, const std::string& filterName = std::string("") > class Filter { public: virtual const std::string& getFilterName() const { static const std::string name = filterName; return name; } }; void breakMe() { Filter<int> boo; } The output is: g++ -c -o template.o template.cpp template.cpp: In instantiation of $-1òøFilter<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const char*)""), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>()))))>òù: template.cpp:18: instantiated from here template.cpp:7: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. Using a typeid in place of std::string("") for the default causes a more cryptic g++ -c -o template.o template.cpp template.cpp: In instantiation of Filter<int, ((const std::type_info*)(& _ZTIi))->const char* std::type_info::name()>: template.cpp:45: instantiated from here template.cpp:34: sorry, unimplemented: call_expr cannot be mangled due to a defect in the C++ ABI template.cpp:34: sorry, unimplemented: call_expr cannot be mangled due to a defect in the C++ ABI template.cpp:45: sorry, unimplemented: call_expr cannot be mangled due to a defect in the C++ ABI template.cpp:45: sorry, unimplemented: call_expr cannot be mangled due to a defect in the C++ ABI template.cpp: In member function const std::string& Filter<FILTER, filterName>::getFilterName() const [with FILTER = int, const std::string& filterName = ((const std::type_info*)(& _ZTIi))->std::type_info::name()]: template.cpp:45: instantiated from here template.cpp:38: sorry, unimplemented: call_expr cannot be mangled due to a defect in the C++ ABI -- Summary: ICE caused by default template argument Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tortoise_74 at yahoo dot co dot uk GCC build triplet: x86_64-linux-redhat GCC host triplet: x86_64-linux-redhat GCC target triplet: x86_64-linux-redhat http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39444