Help Request: Libclang on Windows (C++11)


I’m emailing this list in the hopes that someone might be able to help me. I am currently using libclang to do some very basic reflection of C++. I am creating a translation unit for a header and then visiting all the tree elements using the cursors, in some cases I fall back onto the qualtypes to get the necessary information out. The problem that I’m having right now is that the cursor type libclang return for std::vector (and other std types like std::map ) is incorrect. It looks like libclang can’t identify the type and falls back onto default int as I am getting a type spelling of “int” for fields of type std::vector.

Given the example header file below:



namespace SomeNamespace


struct B


std::string m_string;

std::vector m_vector;



I parse it using clang_parseTranslationUnit2 with the following inputs:

Args: “-x”, “c++”, “-std=c++11”

Options: CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_Incomplete;

Now when visiting the fields for struct B I get:

CXType_Int for the cursor to m_vector instead of CXtype_Unexposed which is what I would expect.

but for the std::string member m_string, I get CXType_Unexposed which allows me to visit the field and extract the necessary info. When visiting the field for the string I correctly get the “namespace” then “typeref” cursor types.

I am completely out of ideas as to what is going on, why does lib clang fail to understand the std::vector type? I’m pretty sure I must be doing something horribly wrong.

I got latest on the libclang version from github on June 1st, 2015, built for windows x64 using MSVC 2013 toolchain.

Any assistance would be greatly appreciated, thanks in advance,


Typically this means your headers weren't found, so parsing might have
failed in other ways also. You might want to see if any diagnostics are
being reported.

-- James