Problem s gcc - moj, alebo kompilatora?

Jaroslav Gratz xgratz01 na stud.fee.vutbr.cz
Neděle Březen 11 23:59:39 CET 2001


On 9 Mar 2001, Stanislav Meduna wrote:

> a nasledovny kod (vykuchany z vacsieho projektu):
> 
> #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)));
> }
> 
> 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
> 
> 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.

Ne že bych do toho nějak moc viděl, ale myslím si, že je to bug. Chtěl
jsem to vyzkoušet na egcs-2.91.66 a libstdc++-2.9.0-24 z RH 6.1, ale tam
ještě vůbec není sstream implementovaný. Nicméně podobný kód funguje
zcela dle předpokladů :)

#include <iostream.h>

class parent
{ friend const parent& operator<<(const parent &, const char *); };

const parent& operator<<(const parent &p, const char *s)
{
  cout << s;
  return p;
}

class child: public parent {};

void foo(const parent &t) {}

main()
{
  child a;
  foo(static_cast<const parent &> (a << "Hello "));
  foo(static_cast<const parent &> (child() << "World\n"));
}

Podle mě to bude chyba v libstdc++.

Jaroslav Gratz



Další informace o konferenci Linux