对 lambda 的常量引用会导致作用域后使用?

问题描述

MSVC Asan 报告了一个我无法理解的作用域后使用错误

示例代码归结为

int main() {
    std::list<std::string> listofStr;
    const auto& pred = [](const std::string& str) { return true; };
    const auto result = std::find_if(listofStr.cbegin(),listofStr.cend(),pred);

    return 0;
}

使用带有以下选项的 MSVC 2019 编译器进行编译:

cl main.cpp /fsanitize=address /Zi /std:c++17

我不会在此处复制完整的错误文本,但我发现在到达 std::find_if 实现的第一行之前,find_if 调用中的 asan 警报。

如果我们删除调试信息 (/Zi) 或切换到 pre-c++17 标准(删除 /std:c++17),错误就会消失。

是什么原因?是 asan 的 bug,还是 c++17 中的引用有新的东西?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)