我正在处理一些遗留的C结构 - 我们有零长度数组。我认为这是无效的,但我们必须忍受它。 我正在写一个宏,我想使用std :: decay将数组衰减到指针类型。
但如果我有一个零长度数组 -
struct data {
key[0]; <<
};
std::decay<decltype(data::key)>
不会衰减到指针类型。我使用它作为函数返回类型,它抱怨 -
GCC错误:
错误:'function'声明为返回数组的函数
如果长度为&gt; = 1
的数组,它可以正常工作答案 0 :(得分:0)
我们可以让编译器的类型检查器而不是模板替换为我们做衰减:
#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, "");
}