C++における配列初期化時にサイズがわかっているのにサイズを指定しろというエラーになる理由が知りたい

前提

C++における配列の初期化の仕様についての質問です。

実現したいこと

###ソースコード

C++

1auto* p0 = new int();2auto* p1 = new int[];3auto* p2 = new int[2];4auto* p3 = new int[2]{ 1, 2 };5auto* p4 = new int[] { 1, 2 };

VisualStudio 2019のコンパイラでは上記の5種類の定義のうち、p1とp4に

エラー C3078 新しい式に配列サイズを指定する必要があります

というエラーが生成されます。

このうち、p1がエラーになるのは、結局配列のサイズが不明なので理解できるのですが、p4もエラーになるのはなぜでしょう。
初期化指定子があるのでコンパイル時にサイズまでわかると思うのですが。

たぶん、規格上の理由があるか、VisualStudioのコンパイラの仕様上の都合だと思うのですが、どういった理由からそうなるのでしょうか。

コメントを投稿

0 コメント