Problem s gcc - moj, alebo kompilatora?

Stanislav Meduna stano na trillian.eunet.sk
Pátek Březen 9 17:00:10 CET 2001


Zdravim,

gcc z RH 7.0:
  gcc version 2.96 20000731 (Red Hat Linux 7.0)
gcc-2.96-69
gcc-c++-2.96-69
libstdc++-2.96-69
libstdc++-devel-2.96-69

a nasledovny kod (vykuchany z vacsieho projektu):

=== snip ===
#include <sstream>
#include <string>

void foo(const std::ostringstream &testStream)
{
}

main()
{
	std::ostringstream testStream;
	std::string testString;

	foo((static_cast<std::ostringstream &>
		(testStream << testString)));
	foo((static_cast<std::ostringstream &>
		(std::ostringstream() << testString)));
}
=== snip ===

Vysledkom je:
cast.cc: In method `ostream::ostream (const ostream &)':
/usr/include/g++-3/streambuf.h:128: `ios::ios (const ios &)' is private
cast.cc:16: within this context
cast.cc: In function `int main ()':
cast.cc:16: could not convert `ostream(1, ((&ostringstream(1, 2)) + 
176))' to `ostream &'
/usr/include/g++-3/std/bastring.h:654: in passing argument 1 of 
`operator<< (ostream &, const basic_string<charT, traits, Allocator> &) 
[with charT = char, traits = string_char_traits<char>, Allocator = 
__default_alloc_template<true, 0>]'



Riadok 16 je posledne volanie foo. Kym poslem bug report, rad
by som si overil, ci vobec ide o korektny kod (nie, nepisal
som ho ja :-)).

Kedze ostringstream je odvodeny z ostream, static_cast by ho mal
vediet castovat naspat (ci je to bezpecne je ina otazka, ale tu
ide o neskompilovanie kodu, nie o bezpecnost). Navyse z hladiska
spracovania kompilatorom nevidim rozdiel medzi prvym
a druhym volanim, spadne vsak iba druhy.

Ak je tu niekto, kto do toho vidi, hodte na to prosim ockom
a povedzte, ci je to bug alebo nie. Taktiez by som poprosil
ludi s inou verziou gcc, ako slavnou RedHatovou, aby to skusili.
Na egcs to myslim islo (nemam momentalne moznost otestovat),
ide mi teda najma o 2.9x.

Vdaka
-- 
                                   Stano



Další informace o konferenci Linux