GCC 错误 - 在 constexpr 中输入/递减数组访问

Posted

技术标签:

【中文标题】GCC 错误 - 在 constexpr 中输入/递减数组访问【英文标题】:GCC Bug - In/Decrement array access in constexpr 【发布时间】:2016-09-10 15:26:29 【问题描述】:

我在 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】:

我打开了https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77553 。 感谢您报告问题。

【讨论】:

以上是关于GCC 错误 - 在 constexpr 中输入/递减数组访问的主要内容,如果未能解决你的问题,请参考以下文章

可以为clang或gcc配置constexpr递归限制吗?

未捕获 constexpr 变量

constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

为啥 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

constexpr 中的构建错误

constexpr string_view 比较