gpt4 book ai didi

c++ - g++内部编译器错误段错误与递归constexpr

转载 作者:行者123 更新时间:2023-11-30 05:19:09 26 4
gpt4 key购买 nike

我最近将我的 g++ 版本更新到 6.3.0 (g++ (Homebrew GCC 6.3.0) 6.3.0),但现在我得到了 g++: internal compiler error: Segmentation fault: 11 (program cc1plus)。使用以前的版本(我不完全确定但大约)5.2 一切正常。在我的另一台计算机上,我使用 g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1,它也可以工作。

代码是:

constexpr bool checkForPrimeNumber(const int p, const int t)
{
return p <= t or (p % t and checkForPrimeNumber(p, t + 2));
}

constexpr bool checkForPrimeNumber(const int p)
{
return p == 2 or (p & 1 and checkForPrimeNumber(p, 3));
}

int main()
{
static_assert(checkForPrimeNumber(65521), "bug...");
}

我编译代码

g++ test.cpp -std=c++11 -fconstexpr-depth=65535

我可以做些什么来解决这个问题?

编辑:

错误报告 sumitted

最佳答案

错误来自 g++ 内部的堆栈溢出。据称我能够增加堆栈(在 macOS 10.11.6 上)。但是,它并没有解决手头的问题。我想出了另一个解决方案,将支票分成两个分支,这是代码:

constexpr bool checkForPrimeNumber(const int p, const int t, const int hi)
{
return p < hi and (p <= t or (p % t and checkForPrimeNumber(p, t + 2, hi)));
}

constexpr bool checkForPrimeNumber(const int p)
{
return p == 2 or (p & 1 and (checkForPrimeNumber(p, 3, 32768) or checkForPrimeNumber(p, 3+32768, 65536)));
}

int main()
{
static_assert(checkForPrimeNumber(65521), "");
}

谢谢

编辑:

正如评论中所建议的,解决方案可能是使用 C++14:

constexpr bool checkForPrimeNumber(const int p)
{
if (p < 2)
return false;
if (p == 2)
return true;
if (~p & 1)
return false;
for (int i = 3; i < p; i += 2)
{
if (p % i == 0)
return false;
}
return true;
}

关于c++ - g++内部编译器错误段错误与递归constexpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com