微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决对 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 举报,一经查实,本站将立刻删除。