如何强制 clang 使用 system(ubuntu) STL 标头而不是 clang 的

How to force clang to check semantic with system(ubuntu) STL header instead of clang's

本文关键字:clang STL 使用 何强制 system ubuntu      更新时间:2023-10-16

当我尝试使用 clang++ 来检测语义时我的程序可以用gcc编译。当我使用 clang 来检测语义时,我得到:

错误| 没有可行的重载 '*='

问题发生在我从开源项目中包含的一个标题

std::vector<double> Hc;
checksum(H,Hc);
Hc*=1.0/mrpt::math::maximum(Hc);

我认为问题在于 clang 的 STLib 标头与我的 Ubuntu 的 C++ 标头不同,并且它们没有覆盖*=选择。我添加了

 -std=c++11 
 -stdlib=libc++11 
 -nodefaultlibs 

并尝试了这个 http://libcxx.llvm.org 但唯一的错误仍然存在。确实,我正在尝试YouCompleteMe插件vim.这个插件只需要编译语义,没有链接步骤。而且我无法更改标题。 '-isystem并不能解决问题'我应该怎么做才能强制 clang 使用系统 STL 标头而不是 clang 的标头检查语义?

对于记录,这确实是MRPT标头中的一个错误,最近已解决。所以,这不是 clang++ 的错,事实上较新的 gcc 6.0 也检测到了错误。