我对以下代码有疑问
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
我错过了什么?如果有人可以请赐教,因为我显然在这个问题上解决了太久,可能在这里看不到主要问题。