This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: libstdc++/2383: Problems with istrstream


The following reply was made to PR libstdc++/2383; it has been noted by GNATS.

From: Martin Sebor <sebor@roguewave.com>
To: gcc-gnats@gcc.gnu.org, schmid@snake.iap.physik.tu-darmstadt.de
Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Subject: Re: libstdc++/2383: Problems with istrstream
Date: Tue, 27 Mar 2001 10:37:02 -0700

 schmid@snake.iap.physik.tu-darmstadt.de wrote:
 > 
 > >Number:         2383
 > >Category:       libstdc++
 > >Synopsis:       Problems with istrstream
 ...
 > G++ 3.0 and 3.1 reject the following (IMHO legal) code ts1.C. G++
 > 2.95.2 has no problem compiling it into a working executable. If the
 > temporary std::istrstream(buff, strlen(buff)) is made a named
 > variable (#if 0), g++ 3.0 and 3.1 accept the code. I am not shure, if
 > this is a libstdc++ problem or g++ related.
 
 The problem is that std::operator(basic_istream<>&, char*) takes
 a non-const reference as its first argument, which makes it not
 viable (13.3.2, p3). Since none of the other (member) candidates
 is viable (there is no conversion from char(&)[] to any of
 the fundamental types or void*&), the program is in error.
 
 Regards
 Martin
 
 > 
 > >How-To-Repeat:
 > Source code ts1.C
 > 
 > #include <strstream>
 > 
 > #define BUFFSIZ 2048
 > #define TESTSIZ 20
 > 
 > int main()
 > {
 >     char buff[BUFFSIZ], reference[TESTSIZ];
 > 
 > #if 1
 >     std::istrstream(buff, strlen(buff)) >> reference;
 > #else
 >     std::istrstream a(buff, strlen(buff));
 >     a >> reference;
 > #endif
 > }
 > Compiling ts1.C
 > 
 > #if 1
 > g++ -v -o ts1 ts1.C -W -Wall -save-temps
 > Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
 > Configured with: ../gcc/configure --enable-shared --disable-nls
 > --enable-threads=posix --enable-long-long
 > --enable-languages=c,c++,f77,objc
 > gcc version 3.1 20010324 (experimental)
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cpp0 -lang-c++
 > -D_GNU_SOURCE -D__GNUG__=3 -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v
 > -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix
 > -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux
 > -Asystem=posix -D__STDC_HOSTED__=1 -W -Wall -Acpu=i386 -Amachine=i386
 > -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ ts1.C
 > ts1.ii
 > GNU CPP version 3.1 20010324 (experimental) (cpplib) (i386 Linux/ELF)
 > #include "..." search starts here:
 > #include <...> search starts here:
 >  /usr/local/include/g++-v3
 >  /usr/local/include/g++-v3/i686-pc-linux-gnu
 >  /usr/local/include
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include
 >  /usr/local/i686-pc-linux-gnu/include
 >  /usr/include
 > End of search list.
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -fpreprocessed
 > ts1.ii -quiet -dumpbase ts1.C -W -Wall -version -o ts1.s
 > GNU CPP version 3.1 20010324 (experimental) (cpplib) (i386 Linux/ELF)
 > GNU C++ version 3.1 20010324 (experimental) (i686-pc-linux-gnu)
 >         compiled by GNU C version 3.1 20010324 (experimental).
 > ts1.C: In function `int main()':
 > ts1.C:12: no match for `std::istrstream >> char[20]' operator
 > /usr/local/include/g++-v3/bits/istream.tcc:83: candidates are:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(std::basic_istream<_CharT,
 >    _Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT =
 > char,
 >    _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:92:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(std::basic_ios<_CharT,
 >    _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char,
 > _Traits
 >    = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:101:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(std::ios_base&(*)(std::ios_base&)) [with _CharT
 > = char,
 >    _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:110:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(bool&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:134:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(short int&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:158:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(short unsigned int&) [with _CharT = char,
 > _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:182:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(int&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:206:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(unsigned int&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:230:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(long int&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:254:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(long unsigned int&) [with _CharT = char, _Traits
 > =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:279:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(long long int&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:303:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(long long unsigned int&) [with _CharT = char,
 > _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:328:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(float&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:352:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(double&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:376:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(long double&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:400:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(void*&) [with _CharT = char, _Traits =
 >    std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/istream.tcc:424:
 >    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
 >    _Traits>::operator>>(std::basic_streambuf<_CharT, _Traits>*) [with
 > _CharT =
 >    char, _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/std_istream.h:265:
 >    std::basic_istream<char, _Traits>&
 > std::operator>>(std::basic_istream<char,
 >    _Traits>&, signed char*) [with _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/std_istream.h:260:
 >    std::basic_istream<char, _Traits>&
 > std::operator>>(std::basic_istream<char,
 >    _Traits>&, unsigned char*) [with _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/std_istream.h:255:
 >    std::basic_istream<_CharT, _Traits>&
 >    std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT*) [with
 > _CharT
 >    = char, _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/std_istream.h:251:
 >    std::basic_istream<char, _Traits>&
 > std::operator>>(std::basic_istream<char,
 >    _Traits>&, signed char&) [with _Traits = std::char_traits<char>]
 > /usr/local/include/g++-v3/bits/std_istream.h:246:
 >    std::basic_istream<char, _Traits>&
 > std::operator>>(std::basic_istream<char,
 >    _Traits>&, unsigned char&) [with _Traits = std::char_traits<char>]
 > 
 > #if 0
 > g++ -v -o ts1 ts1.C -W -Wall
 > Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
 > Configured with: ../gcc/configure --enable-shared --disable-nls
 > --enable-threads=posix --enable-long-long
 > --enable-languages=c,c++,f77,objc
 > gcc version 3.1 20010324 (experimental)
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -v -D__GNUC__=3
 > -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux
 > -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix
 > -D__STDC_HOSTED__=1 -W -Wall -Acpu=i386 -Amachine=i386 -Di386 -D__i386
 > -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ ts1.C -D__GNUG__=3
 > -D_GNU_SOURCE -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase
 > ts1.C -W -Wall -version -o /tmp/ccPvok4H.s
 > GNU CPP version 3.1 20010324 (experimental) (cpplib) (i386 Linux/ELF)
 > GNU C++ version 3.1 20010324 (experimental) (i686-pc-linux-gnu)
 >         compiled by GNU C version 3.1 20010324 (experimental).
 > #include "..." search starts here:
 > #include <...> search starts here:
 >  /usr/local/include/g++-v3
 >  /usr/local/include/g++-v3/i686-pc-linux-gnu
 >  /usr/local/include
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include
 >  /usr/local/i686-pc-linux-gnu/include
 >  /usr/include
 > End of search list.
 > 
 > /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../../../i686-pc-linux-g
 > nu/bin/as -V -Qy -o /tmp/cc7pdSOO.o /tmp/ccPvok4H.s
 > GNU assembler version 2.11.90.0.1 (i686-pc-linux-gnu) using BFD version
 > 2.11.90.0.1
 >  /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/collect2 -m elf_i386
 > -dynamic-linker /lib/ld-linux.so.2 -o ts1 /usr/lib/crt1.o
 > /usr/lib/crti.o /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtbegin.o
 > -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1
 > -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../../../i686-pc-linux
 > -gnu/lib -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../..
 > /tmp/cc7pdSOO.o -lstdc++ -lm -lgcc_s -lc -lgcc_s
 > /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtend.o /usr/lib/crtn.o
 > 
 > Bzip2 compressed and uuencode preprocessed source ts1.ii (#if 1)
 > 
 > >Fix:
 > 
 > >Release-Note:
 > >Audit-Trail:
 > >Unformatted:
 > 
 >                  Name: ts1.ii.bz2
 >    ts1.ii.bz2    Type: unspecified type (application/octet-stream)
 >              Encoding: x-uuencode


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]