簡體   English   中英

std :: decay一個零長度數組

[英]std::decay an zero length array

我正在處理一些遺留的C結構 - 我們有零長度數組。 我認為這是無效的,但我們必須忍受它。 我正在寫一個宏,我想使用std :: decay將數組衰減到指針類型。

但如果我有一個零長度數組 -

struct data {
   key[0]; <<
};

std::decay<decltype(data::key)>不會衰減為指針類型。 我使用它作為函數返回類型,它抱怨 -

GCC錯誤:

錯誤:'function'聲明為返回數組的函數

如果它的長度> = 1,它工作正常

我們可以讓編譯器的類型檢查器而不是模板替換為我們做衰減:

#include <type_traits>

template <typename T>
T* as_ptr(T* x) { return x; }

template <typename T>
using DecayToPointer = decltype(as_ptr(std::declval<T>()));


int main() {
    static_assert(std::is_same<DecayToPointer<int[0]>, int*>::value, "");
    static_assert(std::is_same<DecayToPointer<int[1]>, int*>::value, "");
    static_assert(std::is_same<DecayToPointer<int[]>, int*>::value, "");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM