相关疑难解决方法(0)

GCC导致lambda捕获的参数包的段错误

我有以下SSCCE:

#include <iostream>
#include <string>

void foo(const std::string &a) {
  std::cout << a << std::endl;
}

template <typename... Args>
void bar(Args &&... args) {
  [&]() {
    [&]() {
          foo(args...);
      }();
  }();
}

int main() {
 const std::string x("Hello World!");
 bar(x);
}
Run Code Online (Sandbox Code Playgroud)

在clang ++(3.9.1)下,这会编译并发出"Hello World".Gcc 6.3失败并出现分段错误-O3.

我可以通过显式传递指针和包来修复问题,替换[&]()[&args...]().但是,到目前为止,我认为这[&]与逐个列出所有参数一样.

那么这里出了什么问题?

PS:这不仅限于此-O3.-O0不会发生段错误但不会返回预期的结果("Hello World!"):

[:~/tmp] $ g++-6 -std=c++1z param.cpp && ./a.out

[:~/tmp] $
Run Code Online (Sandbox Code Playgroud)

PPS:进一步降低SSCCE.现在我甚至都没有得到诊断-Wall -Wextra了.

c++ lambda gcc

18
推荐指数
1
解决办法
609
查看次数

标签 统计

c++ ×1

gcc ×1

lambda ×1