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