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代碼即使在支持諸如擴展之類的實現的實現上也不適用於它們。 –