表达式((sizetype)(((ssizetype)length)+ -1))+ 1

时间:2013-09-25 14:04:02

标签: c++ gcc

template <int I>
struct A {};

int main()
{
    int length  = 1;
    int ar[length];
    A<sizeof(ar)> a;
    return 0;
}

我收到错误:(unsigned int)((((unsigned int)(((int)length) + -0x000000001)) + 1u) * 4u)不是类型'int'的有效模板参数,因为它是非常量表达式

这种表达的意义是什么?为什么不能只是length * 4u

1 个答案:

答案 0 :(得分:6)

int length  = 1;
int ar[length];

这是无效的C ++。 GCC接受它(当不使用 时使用的-pedantic-errors),但结果表达式不是有效的C ++对象,不能在sizeof中使用。