C++ 使用g+运行clang scan构建+;在linux上

C++ 使用g+运行clang scan构建+;在linux上,c++,clang++,scan-build,C++,Clang++,Scan Build,我有以下代码: #include <iostream> #include <memory> using namespace std; class A { public: void foo() const; }; void A::foo() const {} std::unique_ptr<A> foo2() { std::unique_ptr<A> pa(new A()); return pa; }

我有以下代码:

#include <iostream>
#include <memory>

using namespace std;

class A
{
    public:
        void foo() const;
};

void A::foo() const {}

std::unique_ptr<A> foo2()
{
    std::unique_ptr<A> pa(new A());
    return pa;
}

void
foo()
{
    const A& ra = *foo2();
    ra.foo();
}

int
main()
{
    foo();
    return 0;
}
该程序使用g++编译并运行良好。 我使用的是CentOS、clang3.8和g++4.8.5

错误消息:

 error: no type named 'unique_ptr' in namespace 'std'
 std::unique_ptr<A> foo2()
 ~~~~~^
错误:命名空间“std”中没有名为“unique_ptr”的类型
std::unique_ptr foo2()
~~~~~^
您应该使用:

scan-build g++ -std=c++11 unique_ptr.cpp
而不是:

scan-build g++ --std=c++11 unique_ptr.cpp
-std
有效(而
--std
无效),因为
扫描构建
专门检查
-std
标志

在:

scan-build g++ --std=c++11 unique_ptr.cpp
if ($Arg =~ /^-std=/) {
  push @CompileOpts,$Arg;
  next;
}