whitcomb@VIVALDI.BERKELEY.EDU (Gregg Whitcomb) (01/11/90)
old version: 1.35.0+ on a vax/ultrix, libg++ 1.35 (I think)
new version: 1.36.2 on a decstation (this probably isn't machine specific)
libg++ 1.36.2
description: order of type conversion is difference. Old version
converts "x" to a String using the String operator of class X.
New version converts "x" to an int using the int operator of class X
and then converts the int to a String using the int operator of String.
Also, old version doesn't accept ambiguous conversion for x for << operator,
new version does.
----- teststr.cc
#include <String.h>
#include <stream.h>
class X
{
int a;
public:
X(int v) {a = v;}
operator String() {return String("$") + String(itoa(a));}
operator int() {return a;}
};
main()
{
X x(42);
#ifdef OLDVERSION
cout << String(x) << ":" << "\n";
#else
cout << String(x) << ":" << x << "\n";
#endif
}
----- new version compile/run
vivaldi% g++ teststr.cc
teststr.cc: In method X::operator class String ():
teststr.cc:9: warning: function too large to be inline
vivaldi% a.out
*:42
----- old version compile/run
g++ -DOLDVERSION teststr.cc
eros% a.out
$42:
-Gregg (whitcomb@vivaldi.Berkeley.EDU)