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應該給你的信息。 –