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