次のコードに問題があります
template<typename... TArgs>
void SomeFunc() {
Foo* data[] = {
Func<TArgs>()..., // <- expand the pack into array but calling Func for each type
nullptr
};
}
Func はもちろん Foo* インスタンスを返します。
最後の nullptr は、TArgs が空で配列のサイズがゼロにならない場合のケースですが、この事実にもかかわらず、コードをコンパイルし、空のテンプレート引数リストで SomeFunc をインスタンス化すると、次のようになります。
cannot allocate an array of constant size 0
nullptr 要素が存在しなかったように。配列の宣言を次のように変更すると:
Foo* data[sizeof...(TArgs) + 1] =
エラーメッセージも変わります:
Error 2 error C4789: buffer 'data' of size 8 bytes will be overrun; -4 bytes will be written starting at offset 8
何が欠けていますか?私は明らかにこの問題をあまりにも長く叩いており、おそらくここで主な問題が見当たらないので、誰かが私を啓発してくれたら幸いです。