3
我正在处理一些传统的C结构 - 我们有零长度数组。我认为这是无效的,但我们必须忍受它。 我正在写一个宏,我想使用std :: decay将数组衰减到指针类型。std :: decay一个零长度数组
但是,如果我具有零长度的数组 -
struct data {
key[0]; <<
};
std::decay<decltype(data::key)>
犯规衰变到指针类型。我用这作为函数返回类型,它抱怨 -
GCC错误:
error: ‘function’ declared as function returning an array
它工作正常,如果它的长度的数组> = 1
是否可以将它们的源代码从'T key [0]'更改为'T key []'? – kennytm
不幸的是我不能那样做。我们可以为std :: remove_extend添加一个T [0]重载并使其工作吗? – MGH
'T [0]'是非常奇怪的野兽,因为标准要求在SFINAE上下文中形成这种类型的任何尝试都会导致扣除失败。这意味着,编写用于处理普通数组类型的大量TMP代码即使在支持诸如扩展之类的实现的实现上也不适用于它们。 –