问题描述
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 (将#修改为@)