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 中输入/递减数组访问的主要内容,如果未能解决你的问题,请参考以下文章
constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?
为啥 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?