在MSVC中编译constexpr代码时出现“错误:seh:setup_exception堆栈溢出”

时间:2017-10-18 16:34:35

标签: c++ constexpr

编译以下代码(godbolt):

err:seh:setup_exception stack overflow 1552 bytes in thread 0058 eip 000000007b48dad8 esp 0000000000131000 stack 0x130000-0x131000-0x1130000

在MSVC上出现此错误:

str_replace

而其他编译器(GCC和Clang)乐意接受它。

为什么这段代码不能在MSVC上编译,我该如何解决呢?

1 个答案:

答案 0 :(得分:1)

我能够通过从函数签名(Godbolt)中删除引用限定符来进行编译:

constexpr bool f(const char *s) {//No longer passes a pointer by reference
  while(*s) { //This avoids undefined behavior when the passed string is empty
    ++s;
  }
  return true;
}

constexpr bool g(const char *s) {
  return f(s);
}

int main() {
  static_assert(g("x"), "");
}

我不知道为什么通过引用传递指针会导致此错误,并且我认为这可能是MSVC编译器中的错误。您应该将错误发布到bug tracking forum