new (somewhere) T;
Up until version 2.3.1, g++ accepted an alternate form of the placement syntax, for historical reasons; use
new {somewhere} T;
As of 2.3.1, g++ finally fixed this, using the standard ARM syntax for "placement new". A few remaining glitches were fixed in 2.3.2. The only remaining problem is with declarators for pointers to functions;
new (void (*)(int)); // confuses gcc 2.3.2
new (a) (void (*)(int)); // ditto
typedef void (*fun)(int);
new fun;
new (a) fun;