3
编译constexpr代码时编译以下代码(godbolt):“ERR:SEH:setup_exception堆栈溢出” 在MSVC
constexpr bool f(const char *&s) {
do {
++s;
} while (*s);
return true;
}
constexpr bool g(const char *s) {
return f(s);
}
int main() {
static_assert(g("x"), "");
}
给出MSVC此错误:
err:seh:setup_exception stack overflow 1552 bytes in thread 0058 eip 000000007b48dad8 esp 0000000000131000 stack 0x130000-0x131000-0x1130000
而其他的编译器( GCC和Clang)高兴地接受它。
为什么不在MSVC上编译这个代码,我该如何解决它?
我能想到的唯一的事实是,在执行空检查之前,您正在增加指针*。这将在空字符串上调用未定义的行为。我不知道为什么这是一个问题。在Godbolt中更改代码以检查增量之前似乎无法解决问题。 – Xirema
很明显是一个错误。即使该代码无效,这也不是MSVC应该给你的信息。 –