This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
error in new'd array of objects
- To: "'egcs-bugs at cygnus dot com'" <egcs-bugs at cygnus dot com>
- Subject: error in new'd array of objects
- From: Paul Kendall <paul at orion dot co dot nz>
- Date: Tue, 18 Nov 1997 17:49:06 +1300
Hi,
The following code fails on the line a=new A[2](1,false);
becuase the compiler is trying to call a contructor
with a bool parameter. Which does not exist. Some
folks say that this construct is invalid C++ (yes it is),
BUT it is a GNU extension according to cp/parse.y
and it fails. With the -pedantic option a warning
"initialization in array new" is given (which is correct).
#include <stdio.h>
class A {
public:
A(bool b) { printf("dooh\n"); }
A(int a, bool b) { printf("cool\n"); }
};
main() {
A* a;
a = new A[2](1,false);
}
this code prints
dooh
dooh
and should print
cool
cool
If I change the line to a = new A[2] = { A(1,false), A(1,false) };
I get
cool
cool
which is correct. With -pedantic I get the follwoing warning
"ANSI C++ forbids initialization of new expression with '='"
"initialization in array new"
whereas the previous line just gave the second warning. I
hope this helps someone fine the error. Either by removing
the ability to call a non-default constructor on new array
or by fixing it so that it works.
Cheers,
Paul Kendall
Product Development Manager
Orion Systems New Zealand Ltd