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 to std::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 tostd
    ::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 🙂


Anmelden zum Antworten