http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32402
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-10-28 17:30:28 UTC --- It doesn't depend on abstract types, this fails, even though it should be able to declare an array of pure* without seeing the definition of pure: struct pure; void f() { pure** p = new (pure (*[3])); } I think the type-id is parsed correctly (it's fine to use it as a function parameter, for example) but something checking the semantics of the new-expression is wrong.