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