SkypeMeSM
SkypeMeSM

Reputation: 3287

Error using Clang tool to parse a C++ standard header file

I am using clang tool to parse standard header file located in /usr/lib/gcc/x86_64-linux-gnu/4.7/string. But I get the following error.

In file included from ~/PrototypeWork/user/header.hpp:3:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/string:41:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/char_traits.h:41:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/postypes.h:41:
/usr/include/c++/4.7/tr1/cwchar:42:14: error: no member named 'wcstof' in namespace 'std'
  using std::wcstof;
        ~~~~~^
/usr/include/c++/4.7/tr1/cwchar:45:14: error: no member named 'vfwscanf' in namespace 'std'
  using std::vfwscanf;
    ~~~~~^

The problem seemed to be that clang is reading string header as a C header instead of c++ header and so it could not parse "using" keyword. So I went ahead an added the -TP command line options that says to treat all source files as C++ but that did not help.

I get the following warning after using -TP command line option

warning: argument unused during compilation: '-T P'

Can anyone help me with this issue?

Clang command line options: http://clang.llvm.org/docs/UsersManual.html#id5

Code

My main function has these:

    int main() {
    std::vector<std::string> cmdLine = boost::assign::list_of
                        ("-TP")
                        ("-I/usr/include")
                        ("-I/usr/include/c++/4.7/tr1/");
    clang::tooling::FixedCompilationDatabase db(".",cmdLine); 

// Provide clang with the header file that needs to be parsed

// Run the clang tool .
}

Upvotes: 4

Views: 2086

Answers (1)

evadeflow
evadeflow

Reputation: 4944

Sorry if this is a "Thank you, Captain Obvious" answer, but: is it possible that the code being parsed is simply failing to #include <cwchar>? clang is a bit more stringent by default than gcc, so you'll see an error like this if you've failed to include the header that declares the function.

Upvotes: 2

Related Questions