GCC / iostream templates
-
G++ 3.0.4:
#include <fstream> int main() { typedef std::basic_ifstream<unsigned char> uifstream; uifstream f("foo"); }
=> Segmentation fault. Mal noch den Stacktrace, falls damit wer was anfangen kann:
#0 0x08049c31 in std::__ctype_abstract_base<unsigned char>::widen(char) const (this=0x804df6c, __c=32) at /usr/include/g++-v3/bits/locale_facets.h:97 97 { return this->do_widen(__c); } (gdb) bt #0 0x08049c31 in std::__ctype_abstract_base<unsigned char>::widen(char) const (this=0x804df6c, __c=32) at /usr/include/g++-v3/bits/locale_facets.h:97 #1 0x08049607 in std::basic_ios<unsigned char, std::char_traits<unsigned char> >::widen(char) const (this=0xbffffb98, __c=32 ' ') at /usr/include/g++-v3/bits/basic_ios.tcc:99 #2 0x080492cc in std::basic_ios<unsigned char, std::char_traits<unsigned char> >::init(std::basic_streambuf<unsigned char, std::char_traits<unsigned char> >*) (this=0xbffffb98, __sb=0x0) at /usr/include/g++-v3/bits/basic_ios.tcc:122 #3 0x08049152 in std::basic_istream<unsigned char, std::char_traits<unsigned char> >::basic_istream(std::basic_streambuf<unsigned char, std::char_traits<unsigned char> >*) (this=0xbffffb14, __vtt_parm=0x804d084, __sb=0x0) at /usr/include/g++-v3/bits/std_istream.h:73 #4 0x08048fb9 in std::basic_ifstream<unsigned char, std::char_traits<unsigned char> >::basic_ifstream(char const*, std::_Ios_Openmode) (this=0xbffffb14, __s=0x804c000 "foo", __mode=8) at /usr/include/g++-v3/bits/std_fstream.h:258 #5 0x08048e86 in main () at file.cc:5
GCC-Problem oder darf man das nicht?
-
Läßt sich garnicht compilieren mit g++ 3.2
-
bei mir schon
hmpf was mach ich jetzt, Bug Report?
-
Wenn es sich mit nem neueren nicht kompilieren läßt wirds wahrscheinlich illegal sein, oder?
Aber hättest du lieber im C++ Forum gefragt, da hätte Hume dir sicherlich was zu erzählt.
-
Scheinen aber nur Linker-Fehler zu sein. :o
[code
C:\>g++ bashar.cpp
C:\DOKUME1\FOO\LOKALE1\Temp/cca8aaaa.o(.text\_ZNSt13basic\_filebufIhSt11ch ar\_traitsIhEE5closeEv+0x24):bashar.cpp: undefined reference to `std::char\_traits::eof()' C:\\DOKUME~1\\FOO\\LOKALE~1\\Temp/cca8aaaa.o(.text_ZNSt13basic_filebufIhSt11ch
ar_traitsIhEE5closeEv+0x76):bashar.cpp: undefined reference tostd::char\_traits <unsigned char>::eq\_int\_type(unsigned long const&, unsigned long const&)' C:\\DOKUME~1\\FOO\\LOKALE~1\\Temp/cca8aaaa.o(.text$\_ZNSt13basic\_filebufIhSt11ch ar\_traitsIhEE18\_M\_really\_overflowEm+0x7):bashar.cpp: undefined reference to
std
::char_traits<unsigned char>::eof()'
...
[/code]Muss man da noch was zulinken? Andere Programme compilieren auch bestens.
-
Ah, habs nochmal ausprobiert. Mit 'char' kompiliert und läuft es unter g++ 3.2.
-
jo klar gehts mit char, basic_ifstream<char> ist ja als ifstream vordefiniert und wird zillionenfach benutzt