[comp.lang.c++] Parentheses after new

jk@cs.man.ac.uk (John Kewley ICL) (08/23/90)

The following fails to compile on both G++ and Sun C++. Could you tell me
why the brackets around new's argument is illegal.
I thought it would be a nice way of grouping the expression for a
new statement (function?):

class test
{
public:
	int eekeek;
	test(int eek) {eekeek= eek;}
	test() {eekeek= 4;}
};

int main()
{
	test* thattest= new (test);
	test* thistest= new (test(1));
	return(0);
}
--
        J.K.
 
John M. Kewley, ICL, Wenlock Way, West Gorton, Manchester. M12 5DR
Tel:   (+44) 61 223 1301 X2138  Email: jk@r6.cs.man.ac.uk / jk@nw.stl.stc.co.uk

steve@taumet.com (Stephen Clamage) (08/24/90)

jk@cs.man.ac.uk (John Kewley ICL) writes:

>The following fails to compile on both G++ and Sun C++. Could you tell me
>why the brackets around new's argument is illegal....
>class test
>{
>public:
>	test(int eek);
>	test();
>};
>int main()
>{
>	test* thattest= new (test);
>	test* thistest= new (test(1));
>}

The keyword _new_ may be optionally followed by a placement expresion-list
in parens, followed by either a type-name in parens or a new-type-name not
in parens.  If there is no placement, _new_ must be followed by a
new-type-name or by a type-name in parens.  Finally, an initializer-list in
parens may be tacked onto any of these.

So the outer-level parens in a _new_ clause are not part of any expression,
but part of the _new_ syntax to determine which form is being used.  The
examples you have do not fit any of the syntax productions.
-- 

Steve Clamage, TauMetric Corp, steve@taumet.com
-- 

Steve Clamage, TauMetric Corp, steve@taumet.com