2016-05-17 12 views
2

Ich habe den folgenden Code:läuft Klirren scan bauen mit g ++ auf Linux

#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; 
} 

Ich versuche Klirren des Scan-build zu verwenden:

scan-build g++ --std=c++11 unique_ptr.cpp 

Dieses Programm kompiliert und läuft mit g fein ++ . Ich verwende CentOS und clang3.8 und g ++ 4.8.5.

Fehlermeldung:

error: no type named 'unique_ptr' in namespace 'std' 
std::unique_ptr<A> foo2() 
~~~~~^ 

Antwort

3

sollten Sie verwenden:

scan-build g++ -std=c++11 unique_ptr.cpp 

Statt:

scan-build g++ --std=c++11 unique_ptr.cpp 

-std Werke (während --std nicht), weil scan-build Kontrollen speziell für die -std Flagge.

In clang/tools/scan-build/libexec/ccc-analyzer:

if ($Arg =~ /^-std=/) { 
    push @CompileOpts,$Arg; 
    next; 
}