分配动态数组而不指定格式良好的代码?

Alo*_*ave 10 c++ new-operator language-lawyer

以下简单的程序片段给出了编译错误gcc-4.3.4.

程序:

int main() 
{   
    char *ptr = new char[10];     
    char *ptr1 = new char[];      
    return 0; 
}  
Run Code Online (Sandbox Code Playgroud)

编译错误:

prog.cpp:在函数'int main()'中:
prog.cpp:4:错误:在']'之前预期的primary-expression
prog.cpp:3:警告:未使用的变量'
ptr'prog.cpp:4:warning :未使用的变量'ptr1'

但是同样的编译与MSVC完全没有任何诊断消息.

所以我的问题是:
标准是否允许在new []不指定的情况下调用size?或者这是MSVC中的一个错误?
有人可以提供标准的参考,最终会说上面的代码示例是格式错误还是格式正确?


我看过:

5.3.4 New [expr.new]&
18.4.1.2数组形式[lib.new.delete.array]

但无法找到有关该行为的任何确凿证据.


编辑:
添加Language Lawyer标签.
我期待观察到的行为的答案,无论它是否有用,我完全清楚它没有用处,也没有推荐.

Man*_*rse 4

这在语法上是不正确的。

看一下new-expression语法

noptr -new-declarator必须在方括号之间包含一个表达式,并且表达式中必须包含一个标记。