GCC Bug - 在constexpr中输入/减少数组访问

时间:2016-09-10 15:26:29

标签: c++ gcc c++14 constexpr gcc6

我在constexpr函数中发现了GCC 6和7中的错误(不在GCC 5中),如果函数在编译时(错误结果)或运行时(正确结果)得到评估,则会导致不同的结果。

#include <iostream>

constexpr int bar(int *b) {
  int i = 0;
  b[i++] = 1; // GCC produce here an failure.

  return 0;
}

constexpr int foo()
{
  int tmp[] = {0};
  bar(tmp);

  return tmp[0];
}

constexpr int cexprI = foo();

int main()
{
  std::cout << cexprI << " " << foo() << "\n";

  return 0;
}

Live Example

问题是数组访问中的增量(也发生在减量)操作。

常量表达式的编译时结果为0(错误),运行时结果为1(正确)。

任何人都可以确认此错误并将其报告给:https://gcc.gnu.org/bugzilla/

我无法在User account creation has been restricted.创建帐户。我联系了管理员,但对我来说这个问题很重要。所以它也想通知你。谢谢!

1 个答案:

答案 0 :(得分:3)

我已经开了go-offline。 感谢您报告此问题。