vaughan%cadillac.cad.mcc.com@MCC.COM (Paul Vaughan) (10/26/89)
This code compiles under 1.35.1, but not under 1.36. The code
is annotated with the error given by the 1.36 compiler, on the line
that it mentioned.
class A {
public:
A() {}
};
class B {
public:
B(A* a = new A)
{} // sorry, not implemented: that operation not supported for default parameters
};
main() {
A a;
}
This is how it was compiled
[1.132]puma) /usr/local/gnu/1.36/bin/g++ -v -Dv136 -g -B/usr/local/gnu/1.36/lib/gcc- -g -O -DX11 -I/usr/local/gnu/1.36/lib/g++-include -o args args.cc -L/usr/local/gnu/1.36/lib -lg++ -llwp -lX11 -lm
gcc version 1.36
/usr/local/gnu/1.36/lib/gcc-cpp -+ -v -Dv136 -DX11 -I/usr/local/gnu/1.36/lib/g++-include -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 args.cc /usr/tmp/cca01499.cpp
GNU CPP version 1.36
/usr/local/gnu/1.36/lib/gcc-cc1plus /usr/tmp/cca01499.cpp -quiet -dumpbase args.cc -g -O -version -o /usr/tmp/cca01499.s
GNU C++ version 1.36.0- (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36.
default target switches: -m68020 -mc68020 -m68881 -mbitfield
The version of 1.36 is less than 2 weeks old. I also tried it on
another instance of 1.36 that was created by someone else, just to
check for incorrect installation.
-------------------------------------------------------------------
This is on a different subject, and I'm not sure if it is a bug or
not. g++ currently accepts the following code.
struct D;
struct C {
C(D*) {};
};
struct D : public C {
D() : C(this) {}
};
main() {
D d;
}
Note that this code passes a pointer to the uninitialized D object to
the C constructor. The C constructor could conceivably use members of
an unitialized object. I haven't been able to find anything about
this in Lippman's book, and I don't have the reference manual, but
this seems basically wrong.