質問: C/C++の配列へのポインタは要素へのポインタにて代用される場合が多いです。(`int foo[3];`とした時、`foo`は`int`型へのポインタとなる等。) しかし、C++の場合、配列の要素数まで含めた型を定義できます。 例えば、`typedef int Int3Array[3];`とすれば、`Int3Array`は`int[3]`型として定義できます。 この時`Int3Array*`は`int[3]`型へのポインタとなります。 そして、`Int3Array* bar=new Int3Array;`としたいのですが、できません。 MinGWの場合、`error: cannot convert 'int*' to 'int (*)[3]' in initialization`というエラーになります。 `new[]`が呼ばれてしまい、戻り値の型が`int`型へのポインタになってしまうのだと思います。 `new[]`ではなく`new`を呼ばせる構文はないでしょうか? --- 【追記】 現在、開発中のライブラリにて配列型のnewをサポートするかどうか検討中です。 そもそもC++にて配列型をnewできないのであればエラー処理する予定です。 しかし、もし、配列型をnewできるのであればサポートしたいと考えています。 --- 【実装しました】 raccyさんご提案のreinterpret_cast<>を使う方法でうまくいきました。私が何か見落として無ければ必要な機能に全て対応できた筈です。また、私に可能な確認とcatsforepawさんのclangでの確認により、使っても大きな問題にはならないだろうと判断しました。 最初にご提案頂いたraccyさんの回答をベスト・アンサーとさせて頂きました。 raccyさん、catsforepawさん、ありがとうございます。 また、epistemeさんもお付き合い、ありがとうございます。
回答: 無理矢理キャストしたらなんかできました。でも、これで正しいのかどうかよくわかってません。 ``` #include typedef int int3Array[3]; int main() { int3Array *a = reinterpret_cast(new int3Array()); (*a)[0] = 1; (*a)[1] = 2; (*a)[2] = 3; std::cout << a << ": " << *a << ": {" << (*a)[0] << ", " << (*a)[1] << ", " << (*a)[2] << "}" << std::endl; return 0; } ``` aと*aが同じなんですけど、それぞれへはちゃんとアクセスできるみたいです。配列へのポインタってそういう動きなんでしょうか、うーんわからない。