
////////////////////////////////////////////////////////////////////////////////
// File autogenerated by clastgen
//
//  Changes made here will be overwritten.
////////////////////////////////////////////////////////////////////////////////
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include "internal.h"

#include <clang/AST/AST.h>
#include <clang/ASTMatchers/ASTMatchers.h>
#include <clang/ASTMatchers/ASTMatchFinder.h>


namespace py = pybind11;

void autogenerated_enums(pybind11::module& m)
{

    py::enum_<clang::AccessSpecifier>(m, "clang_AccessSpecifier")
        .value("AS_public", clang::AccessSpecifier::AS_public)
        .value("AS_protected", clang::AccessSpecifier::AS_protected)
        .value("AS_private", clang::AccessSpecifier::AS_private)
        .value("AS_none", clang::AccessSpecifier::AS_none)
        .export_values();
    ;

    py::enum_<clang::ArrayTypeTrait>(m, "clang_ArrayTypeTrait")
        .value("ATT_ArrayRank", clang::ArrayTypeTrait::ATT_ArrayRank)
        .value("ATT_ArrayExtent", clang::ArrayTypeTrait::ATT_ArrayExtent)
        .export_values();
    ;

    py::enum_<clang::AtomicExpr::AtomicOp>(m.attr("AtomicExpr"), "clang_AtomicExpr_AtomicOp")
        .value("AO__c11_atomic_init", clang::AtomicExpr::AtomicOp::AO__c11_atomic_init)
        .value("AO__c11_atomic_load", clang::AtomicExpr::AtomicOp::AO__c11_atomic_load)
        .value("AO__c11_atomic_store", clang::AtomicExpr::AtomicOp::AO__c11_atomic_store)
        .value("AO__c11_atomic_exchange", clang::AtomicExpr::AtomicOp::AO__c11_atomic_exchange)
        .value("AO__c11_atomic_compare_exchange_strong", clang::AtomicExpr::AtomicOp::AO__c11_atomic_compare_exchange_strong)
        .value("AO__c11_atomic_compare_exchange_weak", clang::AtomicExpr::AtomicOp::AO__c11_atomic_compare_exchange_weak)
        .value("AO__c11_atomic_fetch_add", clang::AtomicExpr::AtomicOp::AO__c11_atomic_fetch_add)
        .value("AO__c11_atomic_fetch_sub", clang::AtomicExpr::AtomicOp::AO__c11_atomic_fetch_sub)
        .value("AO__c11_atomic_fetch_and", clang::AtomicExpr::AtomicOp::AO__c11_atomic_fetch_and)
        .value("AO__c11_atomic_fetch_or", clang::AtomicExpr::AtomicOp::AO__c11_atomic_fetch_or)
        .value("AO__c11_atomic_fetch_xor", clang::AtomicExpr::AtomicOp::AO__c11_atomic_fetch_xor)
        .value("AO__atomic_load", clang::AtomicExpr::AtomicOp::AO__atomic_load)
        .value("AO__atomic_load_n", clang::AtomicExpr::AtomicOp::AO__atomic_load_n)
        .value("AO__atomic_store", clang::AtomicExpr::AtomicOp::AO__atomic_store)
        .value("AO__atomic_store_n", clang::AtomicExpr::AtomicOp::AO__atomic_store_n)
        .value("AO__atomic_exchange", clang::AtomicExpr::AtomicOp::AO__atomic_exchange)
        .value("AO__atomic_exchange_n", clang::AtomicExpr::AtomicOp::AO__atomic_exchange_n)
        .value("AO__atomic_compare_exchange", clang::AtomicExpr::AtomicOp::AO__atomic_compare_exchange)
        .value("AO__atomic_compare_exchange_n", clang::AtomicExpr::AtomicOp::AO__atomic_compare_exchange_n)
        .value("AO__atomic_fetch_add", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_add)
        .value("AO__atomic_fetch_sub", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_sub)
        .value("AO__atomic_fetch_and", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_and)
        .value("AO__atomic_fetch_or", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_or)
        .value("AO__atomic_fetch_xor", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_xor)
        .value("AO__atomic_fetch_nand", clang::AtomicExpr::AtomicOp::AO__atomic_fetch_nand)
        .value("AO__atomic_add_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_add_fetch)
        .value("AO__atomic_sub_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_sub_fetch)
        .value("AO__atomic_and_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_and_fetch)
        .value("AO__atomic_or_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_or_fetch)
        .value("AO__atomic_xor_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_xor_fetch)
        .value("AO__atomic_nand_fetch", clang::AtomicExpr::AtomicOp::AO__atomic_nand_fetch)
        .value("BI_First", clang::AtomicExpr::AtomicOp::BI_First)
        .export_values();
    ;

    py::enum_<clang::AutoTypeKeyword>(m, "clang_AutoTypeKeyword")
        .value("Auto", clang::AutoTypeKeyword::Auto)
        .value("DecltypeAuto", clang::AutoTypeKeyword::DecltypeAuto)
        .value("GNUAutoType", clang::AutoTypeKeyword::GNUAutoType)
        .export_values();
    ;

    py::enum_<clang::AvailabilityResult>(m, "clang_AvailabilityResult")
        .value("AR_Available", clang::AvailabilityResult::AR_Available)
        .value("AR_NotYetIntroduced", clang::AvailabilityResult::AR_NotYetIntroduced)
        .value("AR_Deprecated", clang::AvailabilityResult::AR_Deprecated)
        .value("AR_Unavailable", clang::AvailabilityResult::AR_Unavailable)
        .export_values();
    ;

    py::enum_<clang::BinaryOperatorKind>(m, "clang_BinaryOperatorKind")
        .value("BO_PtrMemD", clang::BinaryOperatorKind::BO_PtrMemD)
        .value("BO_PtrMemI", clang::BinaryOperatorKind::BO_PtrMemI)
        .value("BO_Mul", clang::BinaryOperatorKind::BO_Mul)
        .value("BO_Div", clang::BinaryOperatorKind::BO_Div)
        .value("BO_Rem", clang::BinaryOperatorKind::BO_Rem)
        .value("BO_Add", clang::BinaryOperatorKind::BO_Add)
        .value("BO_Sub", clang::BinaryOperatorKind::BO_Sub)
        .value("BO_Shl", clang::BinaryOperatorKind::BO_Shl)
        .value("BO_Shr", clang::BinaryOperatorKind::BO_Shr)
        .value("BO_LT", clang::BinaryOperatorKind::BO_LT)
        .value("BO_GT", clang::BinaryOperatorKind::BO_GT)
        .value("BO_LE", clang::BinaryOperatorKind::BO_LE)
        .value("BO_GE", clang::BinaryOperatorKind::BO_GE)
        .value("BO_EQ", clang::BinaryOperatorKind::BO_EQ)
        .value("BO_NE", clang::BinaryOperatorKind::BO_NE)
        .value("BO_And", clang::BinaryOperatorKind::BO_And)
        .value("BO_Xor", clang::BinaryOperatorKind::BO_Xor)
        .value("BO_Or", clang::BinaryOperatorKind::BO_Or)
        .value("BO_LAnd", clang::BinaryOperatorKind::BO_LAnd)
        .value("BO_LOr", clang::BinaryOperatorKind::BO_LOr)
        .value("BO_Assign", clang::BinaryOperatorKind::BO_Assign)
        .value("BO_MulAssign", clang::BinaryOperatorKind::BO_MulAssign)
        .value("BO_DivAssign", clang::BinaryOperatorKind::BO_DivAssign)
        .value("BO_RemAssign", clang::BinaryOperatorKind::BO_RemAssign)
        .value("BO_AddAssign", clang::BinaryOperatorKind::BO_AddAssign)
        .value("BO_SubAssign", clang::BinaryOperatorKind::BO_SubAssign)
        .value("BO_ShlAssign", clang::BinaryOperatorKind::BO_ShlAssign)
        .value("BO_ShrAssign", clang::BinaryOperatorKind::BO_ShrAssign)
        .value("BO_AndAssign", clang::BinaryOperatorKind::BO_AndAssign)
        .value("BO_XorAssign", clang::BinaryOperatorKind::BO_XorAssign)
        .value("BO_OrAssign", clang::BinaryOperatorKind::BO_OrAssign)
        .value("BO_Comma", clang::BinaryOperatorKind::BO_Comma)
        .export_values();
    ;

    py::enum_<clang::BuiltinTemplateKind>(m, "clang_BuiltinTemplateKind")
        .export_values();
    ;

    py::enum_<clang::CallingConv>(m, "clang_CallingConv")
        .value("CC_C", clang::CallingConv::CC_C)
        .value("CC_X86StdCall", clang::CallingConv::CC_X86StdCall)
        .value("CC_X86FastCall", clang::CallingConv::CC_X86FastCall)
        .value("CC_X86ThisCall", clang::CallingConv::CC_X86ThisCall)
        .value("CC_X86VectorCall", clang::CallingConv::CC_X86VectorCall)
        .value("CC_X86Pascal", clang::CallingConv::CC_X86Pascal)
        .value("CC_X86_64Win64", clang::CallingConv::CC_X86_64Win64)
        .value("CC_X86_64SysV", clang::CallingConv::CC_X86_64SysV)
        .value("CC_AAPCS", clang::CallingConv::CC_AAPCS)
        .value("CC_AAPCS_VFP", clang::CallingConv::CC_AAPCS_VFP)
        .value("CC_IntelOclBicc", clang::CallingConv::CC_IntelOclBicc)
        .value("CC_SpirFunction", clang::CallingConv::CC_SpirFunction)
        .value("CC_SpirKernel", clang::CallingConv::CC_SpirKernel)
        .export_values();
    ;

    py::enum_<clang::CapturedRegionKind>(m, "clang_CapturedRegionKind")
        .value("CR_Default", clang::CapturedRegionKind::CR_Default)
        .value("CR_OpenMP", clang::CapturedRegionKind::CR_OpenMP)
        .export_values();
    ;

    py::enum_<clang::CastKind>(m, "clang_CastKind")
        .value("CK_Dependent", clang::CastKind::CK_Dependent)
        .value("CK_BitCast", clang::CastKind::CK_BitCast)
        .value("CK_LValueBitCast", clang::CastKind::CK_LValueBitCast)
        .value("CK_LValueToRValue", clang::CastKind::CK_LValueToRValue)
        .value("CK_NoOp", clang::CastKind::CK_NoOp)
        .value("CK_BaseToDerived", clang::CastKind::CK_BaseToDerived)
        .value("CK_DerivedToBase", clang::CastKind::CK_DerivedToBase)
        .value("CK_UncheckedDerivedToBase", clang::CastKind::CK_UncheckedDerivedToBase)
        .value("CK_Dynamic", clang::CastKind::CK_Dynamic)
        .value("CK_ToUnion", clang::CastKind::CK_ToUnion)
        .value("CK_ArrayToPointerDecay", clang::CastKind::CK_ArrayToPointerDecay)
        .value("CK_FunctionToPointerDecay", clang::CastKind::CK_FunctionToPointerDecay)
        .value("CK_NullToPointer", clang::CastKind::CK_NullToPointer)
        .value("CK_NullToMemberPointer", clang::CastKind::CK_NullToMemberPointer)
        .value("CK_BaseToDerivedMemberPointer", clang::CastKind::CK_BaseToDerivedMemberPointer)
        .value("CK_DerivedToBaseMemberPointer", clang::CastKind::CK_DerivedToBaseMemberPointer)
        .value("CK_MemberPointerToBoolean", clang::CastKind::CK_MemberPointerToBoolean)
        .value("CK_ReinterpretMemberPointer", clang::CastKind::CK_ReinterpretMemberPointer)
        .value("CK_UserDefinedConversion", clang::CastKind::CK_UserDefinedConversion)
        .value("CK_ConstructorConversion", clang::CastKind::CK_ConstructorConversion)
        .value("CK_IntegralToPointer", clang::CastKind::CK_IntegralToPointer)
        .value("CK_PointerToIntegral", clang::CastKind::CK_PointerToIntegral)
        .value("CK_PointerToBoolean", clang::CastKind::CK_PointerToBoolean)
        .value("CK_ToVoid", clang::CastKind::CK_ToVoid)
        .value("CK_VectorSplat", clang::CastKind::CK_VectorSplat)
        .value("CK_IntegralCast", clang::CastKind::CK_IntegralCast)
        .value("CK_IntegralToBoolean", clang::CastKind::CK_IntegralToBoolean)
        .value("CK_IntegralToFloating", clang::CastKind::CK_IntegralToFloating)
        .value("CK_FloatingToIntegral", clang::CastKind::CK_FloatingToIntegral)
        .value("CK_FloatingToBoolean", clang::CastKind::CK_FloatingToBoolean)
        .value("CK_BooleanToSignedIntegral", clang::CastKind::CK_BooleanToSignedIntegral)
        .value("CK_FloatingCast", clang::CastKind::CK_FloatingCast)
        .value("CK_CPointerToObjCPointerCast", clang::CastKind::CK_CPointerToObjCPointerCast)
        .value("CK_BlockPointerToObjCPointerCast", clang::CastKind::CK_BlockPointerToObjCPointerCast)
        .value("CK_AnyPointerToBlockPointerCast", clang::CastKind::CK_AnyPointerToBlockPointerCast)
        .value("CK_ObjCObjectLValueCast", clang::CastKind::CK_ObjCObjectLValueCast)
        .value("CK_FloatingRealToComplex", clang::CastKind::CK_FloatingRealToComplex)
        .value("CK_FloatingComplexToReal", clang::CastKind::CK_FloatingComplexToReal)
        .value("CK_FloatingComplexToBoolean", clang::CastKind::CK_FloatingComplexToBoolean)
        .value("CK_FloatingComplexCast", clang::CastKind::CK_FloatingComplexCast)
        .value("CK_FloatingComplexToIntegralComplex", clang::CastKind::CK_FloatingComplexToIntegralComplex)
        .value("CK_IntegralRealToComplex", clang::CastKind::CK_IntegralRealToComplex)
        .value("CK_IntegralComplexToReal", clang::CastKind::CK_IntegralComplexToReal)
        .value("CK_IntegralComplexToBoolean", clang::CastKind::CK_IntegralComplexToBoolean)
        .value("CK_IntegralComplexCast", clang::CastKind::CK_IntegralComplexCast)
        .value("CK_IntegralComplexToFloatingComplex", clang::CastKind::CK_IntegralComplexToFloatingComplex)
        .value("CK_ARCProduceObject", clang::CastKind::CK_ARCProduceObject)
        .value("CK_ARCConsumeObject", clang::CastKind::CK_ARCConsumeObject)
        .value("CK_ARCReclaimReturnedObject", clang::CastKind::CK_ARCReclaimReturnedObject)
        .value("CK_ARCExtendBlockObject", clang::CastKind::CK_ARCExtendBlockObject)
        .value("CK_AtomicToNonAtomic", clang::CastKind::CK_AtomicToNonAtomic)
        .value("CK_NonAtomicToAtomic", clang::CastKind::CK_NonAtomicToAtomic)
        .value("CK_CopyAndAutoreleaseBlockObject", clang::CastKind::CK_CopyAndAutoreleaseBlockObject)
        .value("CK_BuiltinFnToFnPtr", clang::CastKind::CK_BuiltinFnToFnPtr)
        .value("CK_ZeroToOCLEvent", clang::CastKind::CK_ZeroToOCLEvent)
        .value("CK_AddressSpaceConversion", clang::CastKind::CK_AddressSpaceConversion)
        .export_values();
    ;

    py::enum_<clang::CharacterLiteral::CharacterKind>(m.attr("CharacterLiteral"), "clang_CharacterLiteral_CharacterKind")
        .value("Ascii", clang::CharacterLiteral::CharacterKind::Ascii)
        .value("Wide", clang::CharacterLiteral::CharacterKind::Wide)
        .value("UTF8", clang::CharacterLiteral::CharacterKind::UTF8)
        .value("UTF16", clang::CharacterLiteral::CharacterKind::UTF16)
        .value("UTF32", clang::CharacterLiteral::CharacterKind::UTF32)
        .export_values();
    ;

    py::enum_<clang::SrcMgr::CharacteristicKind>(m, "clang_SrcMgr_CharacteristicKind")
        .value("C_User", clang::SrcMgr::CharacteristicKind::C_User)
        .value("C_System", clang::SrcMgr::CharacteristicKind::C_System)
        .value("C_ExternCSystem", clang::SrcMgr::CharacteristicKind::C_ExternCSystem)
        .export_values();
    ;

    py::enum_<clang::CXXConstructExpr::ConstructionKind>(m.attr("CXXConstructExpr"), "clang_CXXConstructExpr_ConstructionKind")
        .value("CK_Complete", clang::CXXConstructExpr::ConstructionKind::CK_Complete)
        .value("CK_NonVirtualBase", clang::CXXConstructExpr::ConstructionKind::CK_NonVirtualBase)
        .value("CK_VirtualBase", clang::CXXConstructExpr::ConstructionKind::CK_VirtualBase)
        .value("CK_Delegating", clang::CXXConstructExpr::ConstructionKind::CK_Delegating)
        .export_values();
    ;

    py::enum_<clang::VarDecl::DefinitionKind>(m.attr("VarDecl"), "clang_VarDecl_DefinitionKind")
        .value("DeclarationOnly", clang::VarDecl::DefinitionKind::DeclarationOnly)
        .value("TentativeDefinition", clang::VarDecl::DefinitionKind::TentativeDefinition)
        .value("Definition", clang::VarDecl::DefinitionKind::Definition)
        .export_values();
    ;

    py::enum_<clang::QualType::DestructionKind>(m.attr("QualType"), "clang_QualType_DestructionKind")
        .value("DK_none", clang::QualType::DestructionKind::DK_none)
        .value("DK_cxx_destructor", clang::QualType::DestructionKind::DK_cxx_destructor)
        .value("DK_objc_strong_lifetime", clang::QualType::DestructionKind::DK_objc_strong_lifetime)
        .value("DK_objc_weak_lifetime", clang::QualType::DestructionKind::DK_objc_weak_lifetime)
        .export_values();
    ;

    py::enum_<clang::ElaboratedTypeKeyword>(m, "clang_ElaboratedTypeKeyword")
        .value("ETK_Struct", clang::ElaboratedTypeKeyword::ETK_Struct)
        .value("ETK_Interface", clang::ElaboratedTypeKeyword::ETK_Interface)
        .value("ETK_Union", clang::ElaboratedTypeKeyword::ETK_Union)
        .value("ETK_Class", clang::ElaboratedTypeKeyword::ETK_Class)
        .value("ETK_Enum", clang::ElaboratedTypeKeyword::ETK_Enum)
        .value("ETK_Typename", clang::ElaboratedTypeKeyword::ETK_Typename)
        .value("ETK_None", clang::ElaboratedTypeKeyword::ETK_None)
        .export_values();
    ;

    py::enum_<clang::NamedDecl::ExplicitVisibilityKind>(m.attr("NamedDecl"), "clang_NamedDecl_ExplicitVisibilityKind")
        .value("VisibilityForType", clang::NamedDecl::ExplicitVisibilityKind::VisibilityForType)
        .value("VisibilityForValue", clang::NamedDecl::ExplicitVisibilityKind::VisibilityForValue)
        .export_values();
    ;

    py::enum_<clang::ExprObjectKind>(m, "clang_ExprObjectKind")
        .value("OK_Ordinary", clang::ExprObjectKind::OK_Ordinary)
        .value("OK_BitField", clang::ExprObjectKind::OK_BitField)
        .value("OK_VectorComponent", clang::ExprObjectKind::OK_VectorComponent)
        .value("OK_ObjCProperty", clang::ExprObjectKind::OK_ObjCProperty)
        .value("OK_ObjCSubscript", clang::ExprObjectKind::OK_ObjCSubscript)
        .export_values();
    ;

    py::enum_<clang::ExprValueKind>(m, "clang_ExprValueKind")
        .value("VK_RValue", clang::ExprValueKind::VK_RValue)
        .value("VK_LValue", clang::ExprValueKind::VK_LValue)
        .value("VK_XValue", clang::ExprValueKind::VK_XValue)
        .export_values();
    ;

    py::enum_<clang::ExpressionTrait>(m, "clang_ExpressionTrait")
        .value("ET_IsLValueExpr", clang::ExpressionTrait::ET_IsLValueExpr)
        .value("ET_IsRValueExpr", clang::ExpressionTrait::ET_IsRValueExpr)
        .export_values();
    ;

    py::enum_<clang::Decl::FriendObjectKind>(m.attr("Decl"), "clang_Decl_FriendObjectKind")
        .value("FOK_None", clang::Decl::FriendObjectKind::FOK_None)
        .value("FOK_Declared", clang::Decl::FriendObjectKind::FOK_Declared)
        .value("FOK_Undeclared", clang::Decl::FriendObjectKind::FOK_Undeclared)
        .export_values();
    ;

    py::enum_<clang::Qualifiers::GC>(m.attr("Qualifiers"), "clang_Qualifiers_GC")
        .value("GCNone", clang::Qualifiers::GC::GCNone)
        .value("Weak", clang::Qualifiers::GC::Weak)
        .value("Strong", clang::Qualifiers::GC::Strong)
        .export_values();
    ;

    py::enum_<clang::GVALinkage>(m, "clang_GVALinkage")
        .value("GVA_Internal", clang::GVALinkage::GVA_Internal)
        .value("GVA_AvailableExternally", clang::GVALinkage::GVA_AvailableExternally)
        .value("GVA_DiscardableODR", clang::GVALinkage::GVA_DiscardableODR)
        .value("GVA_StrongExternal", clang::GVALinkage::GVA_StrongExternal)
        .value("GVA_StrongODR", clang::GVALinkage::GVA_StrongODR)
        .export_values();
    ;

    py::enum_<clang::ASTContext::GetBuiltinTypeError>(m.attr("ASTContext"), "clang_ASTContext_GetBuiltinTypeError")
        .value("GE_None", clang::ASTContext::GetBuiltinTypeError::GE_None)
        .value("GE_Missing_stdio", clang::ASTContext::GetBuiltinTypeError::GE_Missing_stdio)
        .value("GE_Missing_setjmp", clang::ASTContext::GetBuiltinTypeError::GE_Missing_setjmp)
        .value("GE_Missing_ucontext", clang::ASTContext::GetBuiltinTypeError::GE_Missing_ucontext)
        .export_values();
    ;

    py::enum_<clang::PredefinedExpr::IdentType>(m.attr("PredefinedExpr"), "clang_PredefinedExpr_IdentType")
        .value("Func", clang::PredefinedExpr::IdentType::Func)
        .value("Function", clang::PredefinedExpr::IdentType::Function)
        .value("LFunction", clang::PredefinedExpr::IdentType::LFunction)
        .value("FuncDName", clang::PredefinedExpr::IdentType::FuncDName)
        .value("FuncSig", clang::PredefinedExpr::IdentType::FuncSig)
        .value("PrettyFunction", clang::PredefinedExpr::IdentType::PrettyFunction)
        .value("PrettyFunctionNoVirtual", clang::PredefinedExpr::IdentType::PrettyFunctionNoVirtual)
        .export_values();
    ;

    py::enum_<clang::InClassInitStyle>(m, "clang_InClassInitStyle")
        .value("ICIS_NoInit", clang::InClassInitStyle::ICIS_NoInit)
        .value("ICIS_CopyInit", clang::InClassInitStyle::ICIS_CopyInit)
        .value("ICIS_ListInit", clang::InClassInitStyle::ICIS_ListInit)
        .export_values();
    ;

    py::enum_<clang::CXXNewExpr::InitializationStyle>(m.attr("CXXNewExpr"), "clang_CXXNewExpr_InitializationStyle")
        .value("NoInit", clang::CXXNewExpr::InitializationStyle::NoInit)
        .value("CallInit", clang::CXXNewExpr::InitializationStyle::CallInit)
        .value("ListInit", clang::CXXNewExpr::InitializationStyle::ListInit)
        .export_values();
    ;

    py::enum_<clang::VarDecl::InitializationStyle>(m.attr("VarDecl"), "clang_VarDecl_InitializationStyle")
        .value("CInit", clang::VarDecl::InitializationStyle::CInit)
        .value("CallInit", clang::VarDecl::InitializationStyle::CallInit)
        .value("ListInit", clang::VarDecl::InitializationStyle::ListInit)
        .export_values();
    ;

    py::enum_<clang::Decl::Kind>(m.attr("Decl"), "clang_Decl_Kind")
        .value("AccessSpec", clang::Decl::Kind::AccessSpec)
        .value("Block", clang::Decl::Kind::Block)
        .value("Captured", clang::Decl::Kind::Captured)
        .value("ClassScopeFunctionSpecialization", clang::Decl::Kind::ClassScopeFunctionSpecialization)
        .value("Empty", clang::Decl::Kind::Empty)
        .value("ExternCContext", clang::Decl::Kind::ExternCContext)
        .value("FileScopeAsm", clang::Decl::Kind::FileScopeAsm)
        .value("Friend", clang::Decl::Kind::Friend)
        .value("FriendTemplate", clang::Decl::Kind::FriendTemplate)
        .value("Import", clang::Decl::Kind::Import)
        .value("LinkageSpec", clang::Decl::Kind::LinkageSpec)
        .value("Label", clang::Decl::Kind::Label)
        .value("Namespace", clang::Decl::Kind::Namespace)
        .value("NamespaceAlias", clang::Decl::Kind::NamespaceAlias)
        .value("ObjCCompatibleAlias", clang::Decl::Kind::ObjCCompatibleAlias)
        .value("ObjCCategory", clang::Decl::Kind::ObjCCategory)
        .value("ObjCCategoryImpl", clang::Decl::Kind::ObjCCategoryImpl)
        .value("ObjCImplementation", clang::Decl::Kind::ObjCImplementation)
        .value("firstObjCImpl", clang::Decl::Kind::firstObjCImpl)
        .value("lastObjCImpl", clang::Decl::Kind::lastObjCImpl)
        .value("ObjCInterface", clang::Decl::Kind::ObjCInterface)
        .value("ObjCProtocol", clang::Decl::Kind::ObjCProtocol)
        .value("firstObjCContainer", clang::Decl::Kind::firstObjCContainer)
        .value("lastObjCContainer", clang::Decl::Kind::lastObjCContainer)
        .value("ObjCMethod", clang::Decl::Kind::ObjCMethod)
        .value("ObjCProperty", clang::Decl::Kind::ObjCProperty)
        .value("BuiltinTemplate", clang::Decl::Kind::BuiltinTemplate)
        .value("ClassTemplate", clang::Decl::Kind::ClassTemplate)
        .value("FunctionTemplate", clang::Decl::Kind::FunctionTemplate)
        .value("TypeAliasTemplate", clang::Decl::Kind::TypeAliasTemplate)
        .value("VarTemplate", clang::Decl::Kind::VarTemplate)
        .value("firstRedeclarableTemplate", clang::Decl::Kind::firstRedeclarableTemplate)
        .value("lastRedeclarableTemplate", clang::Decl::Kind::lastRedeclarableTemplate)
        .value("TemplateTemplateParm", clang::Decl::Kind::TemplateTemplateParm)
        .value("firstTemplate", clang::Decl::Kind::firstTemplate)
        .value("lastTemplate", clang::Decl::Kind::lastTemplate)
        .value("Enum", clang::Decl::Kind::Enum)
        .value("Record", clang::Decl::Kind::Record)
        .value("CXXRecord", clang::Decl::Kind::CXXRecord)
        .value("ClassTemplateSpecialization", clang::Decl::Kind::ClassTemplateSpecialization)
        .value("ClassTemplatePartialSpecialization", clang::Decl::Kind::ClassTemplatePartialSpecialization)
        .value("firstClassTemplateSpecialization", clang::Decl::Kind::firstClassTemplateSpecialization)
        .value("lastClassTemplateSpecialization", clang::Decl::Kind::lastClassTemplateSpecialization)
        .value("firstCXXRecord", clang::Decl::Kind::firstCXXRecord)
        .value("lastCXXRecord", clang::Decl::Kind::lastCXXRecord)
        .value("firstRecord", clang::Decl::Kind::firstRecord)
        .value("lastRecord", clang::Decl::Kind::lastRecord)
        .value("firstTag", clang::Decl::Kind::firstTag)
        .value("lastTag", clang::Decl::Kind::lastTag)
        .value("TemplateTypeParm", clang::Decl::Kind::TemplateTypeParm)
        .value("ObjCTypeParam", clang::Decl::Kind::ObjCTypeParam)
        .value("TypeAlias", clang::Decl::Kind::TypeAlias)
        .value("Typedef", clang::Decl::Kind::Typedef)
        .value("firstTypedefName", clang::Decl::Kind::firstTypedefName)
        .value("lastTypedefName", clang::Decl::Kind::lastTypedefName)
        .value("UnresolvedUsingTypename", clang::Decl::Kind::UnresolvedUsingTypename)
        .value("firstType", clang::Decl::Kind::firstType)
        .value("lastType", clang::Decl::Kind::lastType)
        .value("Using", clang::Decl::Kind::Using)
        .value("UsingDirective", clang::Decl::Kind::UsingDirective)
        .value("UsingShadow", clang::Decl::Kind::UsingShadow)
        .value("Field", clang::Decl::Kind::Field)
        .value("ObjCAtDefsField", clang::Decl::Kind::ObjCAtDefsField)
        .value("ObjCIvar", clang::Decl::Kind::ObjCIvar)
        .value("firstField", clang::Decl::Kind::firstField)
        .value("lastField", clang::Decl::Kind::lastField)
        .value("Function", clang::Decl::Kind::Function)
        .value("CXXMethod", clang::Decl::Kind::CXXMethod)
        .value("CXXConstructor", clang::Decl::Kind::CXXConstructor)
        .value("CXXConversion", clang::Decl::Kind::CXXConversion)
        .value("CXXDestructor", clang::Decl::Kind::CXXDestructor)
        .value("firstCXXMethod", clang::Decl::Kind::firstCXXMethod)
        .value("lastCXXMethod", clang::Decl::Kind::lastCXXMethod)
        .value("firstFunction", clang::Decl::Kind::firstFunction)
        .value("lastFunction", clang::Decl::Kind::lastFunction)
        .value("MSProperty", clang::Decl::Kind::MSProperty)
        .value("NonTypeTemplateParm", clang::Decl::Kind::NonTypeTemplateParm)
        .value("Var", clang::Decl::Kind::Var)
        .value("ImplicitParam", clang::Decl::Kind::ImplicitParam)
        .value("ParmVar", clang::Decl::Kind::ParmVar)
        .value("VarTemplateSpecialization", clang::Decl::Kind::VarTemplateSpecialization)
        .value("VarTemplatePartialSpecialization", clang::Decl::Kind::VarTemplatePartialSpecialization)
        .value("firstVarTemplateSpecialization", clang::Decl::Kind::firstVarTemplateSpecialization)
        .value("lastVarTemplateSpecialization", clang::Decl::Kind::lastVarTemplateSpecialization)
        .value("firstVar", clang::Decl::Kind::firstVar)
        .value("lastVar", clang::Decl::Kind::lastVar)
        .value("firstDeclarator", clang::Decl::Kind::firstDeclarator)
        .value("lastDeclarator", clang::Decl::Kind::lastDeclarator)
        .value("EnumConstant", clang::Decl::Kind::EnumConstant)
        .value("IndirectField", clang::Decl::Kind::IndirectField)
        .value("UnresolvedUsingValue", clang::Decl::Kind::UnresolvedUsingValue)
        .value("firstValue", clang::Decl::Kind::firstValue)
        .value("lastValue", clang::Decl::Kind::lastValue)
        .value("firstNamed", clang::Decl::Kind::firstNamed)
        .value("lastNamed", clang::Decl::Kind::lastNamed)
        .value("OMPThreadPrivate", clang::Decl::Kind::OMPThreadPrivate)
        .value("ObjCPropertyImpl", clang::Decl::Kind::ObjCPropertyImpl)
        .value("StaticAssert", clang::Decl::Kind::StaticAssert)
        .value("TranslationUnit", clang::Decl::Kind::TranslationUnit)
        .value("firstDecl", clang::Decl::Kind::firstDecl)
        .value("lastDecl", clang::Decl::Kind::lastDecl)
        .export_values();
    ;

    py::enum_<clang::Expr::LValueClassification>(m.attr("Expr"), "clang_Expr_LValueClassification")
        .value("LV_Valid", clang::Expr::LValueClassification::LV_Valid)
        .value("LV_NotObjectType", clang::Expr::LValueClassification::LV_NotObjectType)
        .value("LV_IncompleteVoidType", clang::Expr::LValueClassification::LV_IncompleteVoidType)
        .value("LV_DuplicateVectorComponents", clang::Expr::LValueClassification::LV_DuplicateVectorComponents)
        .value("LV_InvalidExpression", clang::Expr::LValueClassification::LV_InvalidExpression)
        .value("LV_InvalidMessageExpression", clang::Expr::LValueClassification::LV_InvalidMessageExpression)
        .value("LV_MemberFunction", clang::Expr::LValueClassification::LV_MemberFunction)
        .value("LV_SubObjCPropertySetting", clang::Expr::LValueClassification::LV_SubObjCPropertySetting)
        .value("LV_ClassTemporary", clang::Expr::LValueClassification::LV_ClassTemporary)
        .value("LV_ArrayTemporary", clang::Expr::LValueClassification::LV_ArrayTemporary)
        .export_values();
    ;

    py::enum_<clang::LambdaCaptureDefault>(m, "clang_LambdaCaptureDefault")
        .value("LCD_None", clang::LambdaCaptureDefault::LCD_None)
        .value("LCD_ByCopy", clang::LambdaCaptureDefault::LCD_ByCopy)
        .value("LCD_ByRef", clang::LambdaCaptureDefault::LCD_ByRef)
        .export_values();
    ;

    py::enum_<clang::LinkageSpecDecl::LanguageIDs>(m.attr("LinkageSpecDecl"), "clang_LinkageSpecDecl_LanguageIDs")
        .value("lang_c", clang::LinkageSpecDecl::LanguageIDs::lang_c)
        .value("lang_cxx", clang::LinkageSpecDecl::LanguageIDs::lang_cxx)
        .export_values();
    ;

    py::enum_<clang::LanguageLinkage>(m, "clang_LanguageLinkage")
        .value("CLanguageLinkage", clang::LanguageLinkage::CLanguageLinkage)
        .value("CXXLanguageLinkage", clang::LanguageLinkage::CXXLanguageLinkage)
        .value("NoLanguageLinkage", clang::LanguageLinkage::NoLanguageLinkage)
        .export_values();
    ;

    py::enum_<clang::Linkage>(m, "clang_Linkage")
        .value("NoLinkage", clang::Linkage::NoLinkage)
        .value("InternalLinkage", clang::Linkage::InternalLinkage)
        .value("UniqueExternalLinkage", clang::Linkage::UniqueExternalLinkage)
        .value("VisibleNoLinkage", clang::Linkage::VisibleNoLinkage)
        .value("ExternalLinkage", clang::Linkage::ExternalLinkage)
        .export_values();
    ;

    py::enum_<clang::UserDefinedLiteral::LiteralOperatorKind>(m.attr("UserDefinedLiteral"), "clang_UserDefinedLiteral_LiteralOperatorKind")
        .value("LOK_Raw", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_Raw)
        .value("LOK_Template", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_Template)
        .value("LOK_Integer", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_Integer)
        .value("LOK_Floating", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_Floating)
        .value("LOK_String", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_String)
        .value("LOK_Character", clang::UserDefinedLiteral::LiteralOperatorKind::LOK_Character)
        .export_values();
    ;

    py::enum_<clang::DeclarationName::NameKind>(m.attr("DeclarationName"), "clang_DeclarationName_NameKind")
        .value("Identifier", clang::DeclarationName::NameKind::Identifier)
        .value("ObjCZeroArgSelector", clang::DeclarationName::NameKind::ObjCZeroArgSelector)
        .value("ObjCOneArgSelector", clang::DeclarationName::NameKind::ObjCOneArgSelector)
        .value("ObjCMultiArgSelector", clang::DeclarationName::NameKind::ObjCMultiArgSelector)
        .value("CXXConstructorName", clang::DeclarationName::NameKind::CXXConstructorName)
        .value("CXXDestructorName", clang::DeclarationName::NameKind::CXXDestructorName)
        .value("CXXConversionFunctionName", clang::DeclarationName::NameKind::CXXConversionFunctionName)
        .value("CXXOperatorName", clang::DeclarationName::NameKind::CXXOperatorName)
        .value("CXXLiteralOperatorName", clang::DeclarationName::NameKind::CXXLiteralOperatorName)
        .value("CXXUsingDirective", clang::DeclarationName::NameKind::CXXUsingDirective)
        .export_values();
    ;

    py::enum_<clang::Expr::NullPointerConstantKind>(m.attr("Expr"), "clang_Expr_NullPointerConstantKind")
        .value("NPCK_NotNull", clang::Expr::NullPointerConstantKind::NPCK_NotNull)
        .value("NPCK_ZeroExpression", clang::Expr::NullPointerConstantKind::NPCK_ZeroExpression)
        .value("NPCK_ZeroLiteral", clang::Expr::NullPointerConstantKind::NPCK_ZeroLiteral)
        .value("NPCK_CXX11_nullptr", clang::Expr::NullPointerConstantKind::NPCK_CXX11_nullptr)
        .value("NPCK_GNUNull", clang::Expr::NullPointerConstantKind::NPCK_GNUNull)
        .export_values();
    ;

    py::enum_<clang::Expr::NullPointerConstantValueDependence>(m.attr("Expr"), "clang_Expr_NullPointerConstantValueDependence")
        .value("NPC_NeverValueDependent", clang::Expr::NullPointerConstantValueDependence::NPC_NeverValueDependent)
        .value("NPC_ValueDependentIsNull", clang::Expr::NullPointerConstantValueDependence::NPC_ValueDependentIsNull)
        .value("NPC_ValueDependentIsNotNull", clang::Expr::NullPointerConstantValueDependence::NPC_ValueDependentIsNotNull)
        .export_values();
    ;

    py::enum_<clang::Decl::ObjCDeclQualifier>(m.attr("Decl"), "clang_Decl_ObjCDeclQualifier")
        .value("OBJC_TQ_None", clang::Decl::ObjCDeclQualifier::OBJC_TQ_None)
        .value("OBJC_TQ_In", clang::Decl::ObjCDeclQualifier::OBJC_TQ_In)
        .value("OBJC_TQ_Inout", clang::Decl::ObjCDeclQualifier::OBJC_TQ_Inout)
        .value("OBJC_TQ_Out", clang::Decl::ObjCDeclQualifier::OBJC_TQ_Out)
        .value("OBJC_TQ_Bycopy", clang::Decl::ObjCDeclQualifier::OBJC_TQ_Bycopy)
        .value("OBJC_TQ_Byref", clang::Decl::ObjCDeclQualifier::OBJC_TQ_Byref)
        .value("OBJC_TQ_Oneway", clang::Decl::ObjCDeclQualifier::OBJC_TQ_Oneway)
        .value("OBJC_TQ_CSNullability", clang::Decl::ObjCDeclQualifier::OBJC_TQ_CSNullability)
        .export_values();
    ;

    py::enum_<clang::Qualifiers::ObjCLifetime>(m.attr("Qualifiers"), "clang_Qualifiers_ObjCLifetime")
        .value("OCL_None", clang::Qualifiers::ObjCLifetime::OCL_None)
        .value("OCL_ExplicitNone", clang::Qualifiers::ObjCLifetime::OCL_ExplicitNone)
        .value("OCL_Strong", clang::Qualifiers::ObjCLifetime::OCL_Strong)
        .value("OCL_Weak", clang::Qualifiers::ObjCLifetime::OCL_Weak)
        .value("OCL_Autoreleasing", clang::Qualifiers::ObjCLifetime::OCL_Autoreleasing)
        .export_values();
    ;

    py::enum_<clang::ObjCStringFormatFamily>(m, "clang_ObjCStringFormatFamily")
        .value("SFF_None", clang::ObjCStringFormatFamily::SFF_None)
        .value("SFF_NSString", clang::ObjCStringFormatFamily::SFF_NSString)
        .value("SFF_CFString", clang::ObjCStringFormatFamily::SFF_CFString)
        .export_values();
    ;

    py::enum_<clang::ObjCSubstitutionContext>(m, "clang_ObjCSubstitutionContext")
        .value("Ordinary", clang::ObjCSubstitutionContext::Ordinary)
        .value("Result", clang::ObjCSubstitutionContext::Result)
        .value("Parameter", clang::ObjCSubstitutionContext::Parameter)
        .value("Property", clang::ObjCSubstitutionContext::Property)
        .value("Superclass", clang::ObjCSubstitutionContext::Superclass)
        .export_values();
    ;

    py::enum_<clang::OverloadedOperatorKind>(m, "clang_OverloadedOperatorKind")
        .value("OO_None", clang::OverloadedOperatorKind::OO_None)
        .value("OO_New", clang::OverloadedOperatorKind::OO_New)
        .value("OO_Delete", clang::OverloadedOperatorKind::OO_Delete)
        .value("OO_Array_New", clang::OverloadedOperatorKind::OO_Array_New)
        .value("OO_Array_Delete", clang::OverloadedOperatorKind::OO_Array_Delete)
        .value("OO_Plus", clang::OverloadedOperatorKind::OO_Plus)
        .value("OO_Minus", clang::OverloadedOperatorKind::OO_Minus)
        .value("OO_Star", clang::OverloadedOperatorKind::OO_Star)
        .value("OO_Slash", clang::OverloadedOperatorKind::OO_Slash)
        .value("OO_Percent", clang::OverloadedOperatorKind::OO_Percent)
        .value("OO_Caret", clang::OverloadedOperatorKind::OO_Caret)
        .value("OO_Amp", clang::OverloadedOperatorKind::OO_Amp)
        .value("OO_Pipe", clang::OverloadedOperatorKind::OO_Pipe)
        .value("OO_Tilde", clang::OverloadedOperatorKind::OO_Tilde)
        .value("OO_Exclaim", clang::OverloadedOperatorKind::OO_Exclaim)
        .value("OO_Equal", clang::OverloadedOperatorKind::OO_Equal)
        .value("OO_Less", clang::OverloadedOperatorKind::OO_Less)
        .value("OO_Greater", clang::OverloadedOperatorKind::OO_Greater)
        .value("OO_PlusEqual", clang::OverloadedOperatorKind::OO_PlusEqual)
        .value("OO_MinusEqual", clang::OverloadedOperatorKind::OO_MinusEqual)
        .value("OO_StarEqual", clang::OverloadedOperatorKind::OO_StarEqual)
        .value("OO_SlashEqual", clang::OverloadedOperatorKind::OO_SlashEqual)
        .value("OO_PercentEqual", clang::OverloadedOperatorKind::OO_PercentEqual)
        .value("OO_CaretEqual", clang::OverloadedOperatorKind::OO_CaretEqual)
        .value("OO_AmpEqual", clang::OverloadedOperatorKind::OO_AmpEqual)
        .value("OO_PipeEqual", clang::OverloadedOperatorKind::OO_PipeEqual)
        .value("OO_LessLess", clang::OverloadedOperatorKind::OO_LessLess)
        .value("OO_GreaterGreater", clang::OverloadedOperatorKind::OO_GreaterGreater)
        .value("OO_LessLessEqual", clang::OverloadedOperatorKind::OO_LessLessEqual)
        .value("OO_GreaterGreaterEqual", clang::OverloadedOperatorKind::OO_GreaterGreaterEqual)
        .value("OO_EqualEqual", clang::OverloadedOperatorKind::OO_EqualEqual)
        .value("OO_ExclaimEqual", clang::OverloadedOperatorKind::OO_ExclaimEqual)
        .value("OO_LessEqual", clang::OverloadedOperatorKind::OO_LessEqual)
        .value("OO_GreaterEqual", clang::OverloadedOperatorKind::OO_GreaterEqual)
        .value("OO_AmpAmp", clang::OverloadedOperatorKind::OO_AmpAmp)
        .value("OO_PipePipe", clang::OverloadedOperatorKind::OO_PipePipe)
        .value("OO_PlusPlus", clang::OverloadedOperatorKind::OO_PlusPlus)
        .value("OO_MinusMinus", clang::OverloadedOperatorKind::OO_MinusMinus)
        .value("OO_Comma", clang::OverloadedOperatorKind::OO_Comma)
        .value("OO_ArrowStar", clang::OverloadedOperatorKind::OO_ArrowStar)
        .value("OO_Arrow", clang::OverloadedOperatorKind::OO_Arrow)
        .value("OO_Call", clang::OverloadedOperatorKind::OO_Call)
        .value("OO_Subscript", clang::OverloadedOperatorKind::OO_Subscript)
        .value("OO_Conditional", clang::OverloadedOperatorKind::OO_Conditional)
        .value("OO_Coawait", clang::OverloadedOperatorKind::OO_Coawait)
        .value("NUM_OVERLOADED_OPERATORS", clang::OverloadedOperatorKind::NUM_OVERLOADED_OPERATORS)
        .export_values();
    ;

    py::enum_<clang::RefQualifierKind>(m, "clang_RefQualifierKind")
        .value("RQ_None", clang::RefQualifierKind::RQ_None)
        .value("RQ_LValue", clang::RefQualifierKind::RQ_LValue)
        .value("RQ_RValue", clang::RefQualifierKind::RQ_RValue)
        .export_values();
    ;

    py::enum_<clang::Type::ScalarTypeKind>(m.attr("Type"), "clang_Type_ScalarTypeKind")
        .value("STK_CPointer", clang::Type::ScalarTypeKind::STK_CPointer)
        .value("STK_BlockPointer", clang::Type::ScalarTypeKind::STK_BlockPointer)
        .value("STK_ObjCObjectPointer", clang::Type::ScalarTypeKind::STK_ObjCObjectPointer)
        .value("STK_MemberPointer", clang::Type::ScalarTypeKind::STK_MemberPointer)
        .value("STK_Bool", clang::Type::ScalarTypeKind::STK_Bool)
        .value("STK_Integral", clang::Type::ScalarTypeKind::STK_Integral)
        .value("STK_Floating", clang::Type::ScalarTypeKind::STK_Floating)
        .value("STK_IntegralComplex", clang::Type::ScalarTypeKind::STK_IntegralComplex)
        .value("STK_FloatingComplex", clang::Type::ScalarTypeKind::STK_FloatingComplex)
        .export_values();
    ;

    py::enum_<clang::Expr::SideEffectsKind>(m.attr("Expr"), "clang_Expr_SideEffectsKind")
        .value("SE_NoSideEffects", clang::Expr::SideEffectsKind::SE_NoSideEffects)
        .value("SE_AllowUndefinedBehavior", clang::Expr::SideEffectsKind::SE_AllowUndefinedBehavior)
        .value("SE_AllowSideEffects", clang::Expr::SideEffectsKind::SE_AllowSideEffects)
        .export_values();
    ;

    py::enum_<clang::Stmt::StmtClass>(m.attr("Stmt"), "clang_Stmt_StmtClass")
        .value("NoStmtClass", clang::Stmt::StmtClass::NoStmtClass)
        .value("GCCAsmStmtClass", clang::Stmt::StmtClass::GCCAsmStmtClass)
        .value("MSAsmStmtClass", clang::Stmt::StmtClass::MSAsmStmtClass)
        .value("firstAsmStmtConstant", clang::Stmt::StmtClass::firstAsmStmtConstant)
        .value("lastAsmStmtConstant", clang::Stmt::StmtClass::lastAsmStmtConstant)
        .value("AttributedStmtClass", clang::Stmt::StmtClass::AttributedStmtClass)
        .value("BreakStmtClass", clang::Stmt::StmtClass::BreakStmtClass)
        .value("CXXCatchStmtClass", clang::Stmt::StmtClass::CXXCatchStmtClass)
        .value("CXXForRangeStmtClass", clang::Stmt::StmtClass::CXXForRangeStmtClass)
        .value("CXXTryStmtClass", clang::Stmt::StmtClass::CXXTryStmtClass)
        .value("CapturedStmtClass", clang::Stmt::StmtClass::CapturedStmtClass)
        .value("CompoundStmtClass", clang::Stmt::StmtClass::CompoundStmtClass)
        .value("ContinueStmtClass", clang::Stmt::StmtClass::ContinueStmtClass)
        .value("CoreturnStmtClass", clang::Stmt::StmtClass::CoreturnStmtClass)
        .value("CoroutineBodyStmtClass", clang::Stmt::StmtClass::CoroutineBodyStmtClass)
        .value("DeclStmtClass", clang::Stmt::StmtClass::DeclStmtClass)
        .value("DoStmtClass", clang::Stmt::StmtClass::DoStmtClass)
        .value("BinaryConditionalOperatorClass", clang::Stmt::StmtClass::BinaryConditionalOperatorClass)
        .value("ConditionalOperatorClass", clang::Stmt::StmtClass::ConditionalOperatorClass)
        .value("firstAbstractConditionalOperatorConstant", clang::Stmt::StmtClass::firstAbstractConditionalOperatorConstant)
        .value("lastAbstractConditionalOperatorConstant", clang::Stmt::StmtClass::lastAbstractConditionalOperatorConstant)
        .value("AddrLabelExprClass", clang::Stmt::StmtClass::AddrLabelExprClass)
        .value("ArraySubscriptExprClass", clang::Stmt::StmtClass::ArraySubscriptExprClass)
        .value("ArrayTypeTraitExprClass", clang::Stmt::StmtClass::ArrayTypeTraitExprClass)
        .value("AsTypeExprClass", clang::Stmt::StmtClass::AsTypeExprClass)
        .value("AtomicExprClass", clang::Stmt::StmtClass::AtomicExprClass)
        .value("BinaryOperatorClass", clang::Stmt::StmtClass::BinaryOperatorClass)
        .value("CompoundAssignOperatorClass", clang::Stmt::StmtClass::CompoundAssignOperatorClass)
        .value("firstBinaryOperatorConstant", clang::Stmt::StmtClass::firstBinaryOperatorConstant)
        .value("lastBinaryOperatorConstant", clang::Stmt::StmtClass::lastBinaryOperatorConstant)
        .value("BlockExprClass", clang::Stmt::StmtClass::BlockExprClass)
        .value("CXXBindTemporaryExprClass", clang::Stmt::StmtClass::CXXBindTemporaryExprClass)
        .value("CXXBoolLiteralExprClass", clang::Stmt::StmtClass::CXXBoolLiteralExprClass)
        .value("CXXConstructExprClass", clang::Stmt::StmtClass::CXXConstructExprClass)
        .value("CXXTemporaryObjectExprClass", clang::Stmt::StmtClass::CXXTemporaryObjectExprClass)
        .value("firstCXXConstructExprConstant", clang::Stmt::StmtClass::firstCXXConstructExprConstant)
        .value("lastCXXConstructExprConstant", clang::Stmt::StmtClass::lastCXXConstructExprConstant)
        .value("CXXDefaultArgExprClass", clang::Stmt::StmtClass::CXXDefaultArgExprClass)
        .value("CXXDefaultInitExprClass", clang::Stmt::StmtClass::CXXDefaultInitExprClass)
        .value("CXXDeleteExprClass", clang::Stmt::StmtClass::CXXDeleteExprClass)
        .value("CXXDependentScopeMemberExprClass", clang::Stmt::StmtClass::CXXDependentScopeMemberExprClass)
        .value("CXXFoldExprClass", clang::Stmt::StmtClass::CXXFoldExprClass)
        .value("CXXNewExprClass", clang::Stmt::StmtClass::CXXNewExprClass)
        .value("CXXNoexceptExprClass", clang::Stmt::StmtClass::CXXNoexceptExprClass)
        .value("CXXNullPtrLiteralExprClass", clang::Stmt::StmtClass::CXXNullPtrLiteralExprClass)
        .value("CXXPseudoDestructorExprClass", clang::Stmt::StmtClass::CXXPseudoDestructorExprClass)
        .value("CXXScalarValueInitExprClass", clang::Stmt::StmtClass::CXXScalarValueInitExprClass)
        .value("CXXStdInitializerListExprClass", clang::Stmt::StmtClass::CXXStdInitializerListExprClass)
        .value("CXXThisExprClass", clang::Stmt::StmtClass::CXXThisExprClass)
        .value("CXXThrowExprClass", clang::Stmt::StmtClass::CXXThrowExprClass)
        .value("CXXTypeidExprClass", clang::Stmt::StmtClass::CXXTypeidExprClass)
        .value("CXXUnresolvedConstructExprClass", clang::Stmt::StmtClass::CXXUnresolvedConstructExprClass)
        .value("CXXUuidofExprClass", clang::Stmt::StmtClass::CXXUuidofExprClass)
        .value("CallExprClass", clang::Stmt::StmtClass::CallExprClass)
        .value("CUDAKernelCallExprClass", clang::Stmt::StmtClass::CUDAKernelCallExprClass)
        .value("CXXMemberCallExprClass", clang::Stmt::StmtClass::CXXMemberCallExprClass)
        .value("CXXOperatorCallExprClass", clang::Stmt::StmtClass::CXXOperatorCallExprClass)
        .value("UserDefinedLiteralClass", clang::Stmt::StmtClass::UserDefinedLiteralClass)
        .value("firstCallExprConstant", clang::Stmt::StmtClass::firstCallExprConstant)
        .value("lastCallExprConstant", clang::Stmt::StmtClass::lastCallExprConstant)
        .value("CStyleCastExprClass", clang::Stmt::StmtClass::CStyleCastExprClass)
        .value("CXXFunctionalCastExprClass", clang::Stmt::StmtClass::CXXFunctionalCastExprClass)
        .value("CXXConstCastExprClass", clang::Stmt::StmtClass::CXXConstCastExprClass)
        .value("CXXDynamicCastExprClass", clang::Stmt::StmtClass::CXXDynamicCastExprClass)
        .value("CXXReinterpretCastExprClass", clang::Stmt::StmtClass::CXXReinterpretCastExprClass)
        .value("CXXStaticCastExprClass", clang::Stmt::StmtClass::CXXStaticCastExprClass)
        .value("firstCXXNamedCastExprConstant", clang::Stmt::StmtClass::firstCXXNamedCastExprConstant)
        .value("lastCXXNamedCastExprConstant", clang::Stmt::StmtClass::lastCXXNamedCastExprConstant)
        .value("ObjCBridgedCastExprClass", clang::Stmt::StmtClass::ObjCBridgedCastExprClass)
        .value("firstExplicitCastExprConstant", clang::Stmt::StmtClass::firstExplicitCastExprConstant)
        .value("lastExplicitCastExprConstant", clang::Stmt::StmtClass::lastExplicitCastExprConstant)
        .value("ImplicitCastExprClass", clang::Stmt::StmtClass::ImplicitCastExprClass)
        .value("firstCastExprConstant", clang::Stmt::StmtClass::firstCastExprConstant)
        .value("lastCastExprConstant", clang::Stmt::StmtClass::lastCastExprConstant)
        .value("CharacterLiteralClass", clang::Stmt::StmtClass::CharacterLiteralClass)
        .value("ChooseExprClass", clang::Stmt::StmtClass::ChooseExprClass)
        .value("CompoundLiteralExprClass", clang::Stmt::StmtClass::CompoundLiteralExprClass)
        .value("ConvertVectorExprClass", clang::Stmt::StmtClass::ConvertVectorExprClass)
        .value("CoawaitExprClass", clang::Stmt::StmtClass::CoawaitExprClass)
        .value("CoyieldExprClass", clang::Stmt::StmtClass::CoyieldExprClass)
        .value("firstCoroutineSuspendExprConstant", clang::Stmt::StmtClass::firstCoroutineSuspendExprConstant)
        .value("lastCoroutineSuspendExprConstant", clang::Stmt::StmtClass::lastCoroutineSuspendExprConstant)
        .value("DeclRefExprClass", clang::Stmt::StmtClass::DeclRefExprClass)
        .value("DependentScopeDeclRefExprClass", clang::Stmt::StmtClass::DependentScopeDeclRefExprClass)
        .value("DesignatedInitExprClass", clang::Stmt::StmtClass::DesignatedInitExprClass)
        .value("DesignatedInitUpdateExprClass", clang::Stmt::StmtClass::DesignatedInitUpdateExprClass)
        .value("ExprWithCleanupsClass", clang::Stmt::StmtClass::ExprWithCleanupsClass)
        .value("ExpressionTraitExprClass", clang::Stmt::StmtClass::ExpressionTraitExprClass)
        .value("ExtVectorElementExprClass", clang::Stmt::StmtClass::ExtVectorElementExprClass)
        .value("FloatingLiteralClass", clang::Stmt::StmtClass::FloatingLiteralClass)
        .value("FunctionParmPackExprClass", clang::Stmt::StmtClass::FunctionParmPackExprClass)
        .value("GNUNullExprClass", clang::Stmt::StmtClass::GNUNullExprClass)
        .value("GenericSelectionExprClass", clang::Stmt::StmtClass::GenericSelectionExprClass)
        .value("ImaginaryLiteralClass", clang::Stmt::StmtClass::ImaginaryLiteralClass)
        .value("ImplicitValueInitExprClass", clang::Stmt::StmtClass::ImplicitValueInitExprClass)
        .value("InitListExprClass", clang::Stmt::StmtClass::InitListExprClass)
        .value("IntegerLiteralClass", clang::Stmt::StmtClass::IntegerLiteralClass)
        .value("LambdaExprClass", clang::Stmt::StmtClass::LambdaExprClass)
        .value("MSPropertyRefExprClass", clang::Stmt::StmtClass::MSPropertyRefExprClass)
        .value("MSPropertySubscriptExprClass", clang::Stmt::StmtClass::MSPropertySubscriptExprClass)
        .value("MaterializeTemporaryExprClass", clang::Stmt::StmtClass::MaterializeTemporaryExprClass)
        .value("MemberExprClass", clang::Stmt::StmtClass::MemberExprClass)
        .value("NoInitExprClass", clang::Stmt::StmtClass::NoInitExprClass)
        .value("OMPArraySectionExprClass", clang::Stmt::StmtClass::OMPArraySectionExprClass)
        .value("ObjCArrayLiteralClass", clang::Stmt::StmtClass::ObjCArrayLiteralClass)
        .value("ObjCBoolLiteralExprClass", clang::Stmt::StmtClass::ObjCBoolLiteralExprClass)
        .value("ObjCBoxedExprClass", clang::Stmt::StmtClass::ObjCBoxedExprClass)
        .value("ObjCDictionaryLiteralClass", clang::Stmt::StmtClass::ObjCDictionaryLiteralClass)
        .value("ObjCEncodeExprClass", clang::Stmt::StmtClass::ObjCEncodeExprClass)
        .value("ObjCIndirectCopyRestoreExprClass", clang::Stmt::StmtClass::ObjCIndirectCopyRestoreExprClass)
        .value("ObjCIsaExprClass", clang::Stmt::StmtClass::ObjCIsaExprClass)
        .value("ObjCIvarRefExprClass", clang::Stmt::StmtClass::ObjCIvarRefExprClass)
        .value("ObjCMessageExprClass", clang::Stmt::StmtClass::ObjCMessageExprClass)
        .value("ObjCPropertyRefExprClass", clang::Stmt::StmtClass::ObjCPropertyRefExprClass)
        .value("ObjCProtocolExprClass", clang::Stmt::StmtClass::ObjCProtocolExprClass)
        .value("ObjCSelectorExprClass", clang::Stmt::StmtClass::ObjCSelectorExprClass)
        .value("ObjCStringLiteralClass", clang::Stmt::StmtClass::ObjCStringLiteralClass)
        .value("ObjCSubscriptRefExprClass", clang::Stmt::StmtClass::ObjCSubscriptRefExprClass)
        .value("OffsetOfExprClass", clang::Stmt::StmtClass::OffsetOfExprClass)
        .value("OpaqueValueExprClass", clang::Stmt::StmtClass::OpaqueValueExprClass)
        .value("UnresolvedLookupExprClass", clang::Stmt::StmtClass::UnresolvedLookupExprClass)
        .value("UnresolvedMemberExprClass", clang::Stmt::StmtClass::UnresolvedMemberExprClass)
        .value("firstOverloadExprConstant", clang::Stmt::StmtClass::firstOverloadExprConstant)
        .value("lastOverloadExprConstant", clang::Stmt::StmtClass::lastOverloadExprConstant)
        .value("PackExpansionExprClass", clang::Stmt::StmtClass::PackExpansionExprClass)
        .value("ParenExprClass", clang::Stmt::StmtClass::ParenExprClass)
        .value("ParenListExprClass", clang::Stmt::StmtClass::ParenListExprClass)
        .value("PredefinedExprClass", clang::Stmt::StmtClass::PredefinedExprClass)
        .value("PseudoObjectExprClass", clang::Stmt::StmtClass::PseudoObjectExprClass)
        .value("ShuffleVectorExprClass", clang::Stmt::StmtClass::ShuffleVectorExprClass)
        .value("SizeOfPackExprClass", clang::Stmt::StmtClass::SizeOfPackExprClass)
        .value("StmtExprClass", clang::Stmt::StmtClass::StmtExprClass)
        .value("StringLiteralClass", clang::Stmt::StmtClass::StringLiteralClass)
        .value("SubstNonTypeTemplateParmExprClass", clang::Stmt::StmtClass::SubstNonTypeTemplateParmExprClass)
        .value("SubstNonTypeTemplateParmPackExprClass", clang::Stmt::StmtClass::SubstNonTypeTemplateParmPackExprClass)
        .value("TypeTraitExprClass", clang::Stmt::StmtClass::TypeTraitExprClass)
        .value("TypoExprClass", clang::Stmt::StmtClass::TypoExprClass)
        .value("UnaryExprOrTypeTraitExprClass", clang::Stmt::StmtClass::UnaryExprOrTypeTraitExprClass)
        .value("UnaryOperatorClass", clang::Stmt::StmtClass::UnaryOperatorClass)
        .value("VAArgExprClass", clang::Stmt::StmtClass::VAArgExprClass)
        .value("firstExprConstant", clang::Stmt::StmtClass::firstExprConstant)
        .value("lastExprConstant", clang::Stmt::StmtClass::lastExprConstant)
        .value("ForStmtClass", clang::Stmt::StmtClass::ForStmtClass)
        .value("GotoStmtClass", clang::Stmt::StmtClass::GotoStmtClass)
        .value("IfStmtClass", clang::Stmt::StmtClass::IfStmtClass)
        .value("IndirectGotoStmtClass", clang::Stmt::StmtClass::IndirectGotoStmtClass)
        .value("LabelStmtClass", clang::Stmt::StmtClass::LabelStmtClass)
        .value("MSDependentExistsStmtClass", clang::Stmt::StmtClass::MSDependentExistsStmtClass)
        .value("NullStmtClass", clang::Stmt::StmtClass::NullStmtClass)
        .value("OMPAtomicDirectiveClass", clang::Stmt::StmtClass::OMPAtomicDirectiveClass)
        .value("OMPBarrierDirectiveClass", clang::Stmt::StmtClass::OMPBarrierDirectiveClass)
        .value("OMPCancelDirectiveClass", clang::Stmt::StmtClass::OMPCancelDirectiveClass)
        .value("OMPCancellationPointDirectiveClass", clang::Stmt::StmtClass::OMPCancellationPointDirectiveClass)
        .value("OMPCriticalDirectiveClass", clang::Stmt::StmtClass::OMPCriticalDirectiveClass)
        .value("OMPFlushDirectiveClass", clang::Stmt::StmtClass::OMPFlushDirectiveClass)
        .value("OMPDistributeDirectiveClass", clang::Stmt::StmtClass::OMPDistributeDirectiveClass)
        .value("OMPForDirectiveClass", clang::Stmt::StmtClass::OMPForDirectiveClass)
        .value("OMPForSimdDirectiveClass", clang::Stmt::StmtClass::OMPForSimdDirectiveClass)
        .value("OMPParallelForDirectiveClass", clang::Stmt::StmtClass::OMPParallelForDirectiveClass)
        .value("OMPParallelForSimdDirectiveClass", clang::Stmt::StmtClass::OMPParallelForSimdDirectiveClass)
        .value("OMPSimdDirectiveClass", clang::Stmt::StmtClass::OMPSimdDirectiveClass)
        .value("OMPTaskLoopDirectiveClass", clang::Stmt::StmtClass::OMPTaskLoopDirectiveClass)
        .value("OMPTaskLoopSimdDirectiveClass", clang::Stmt::StmtClass::OMPTaskLoopSimdDirectiveClass)
        .value("firstOMPLoopDirectiveConstant", clang::Stmt::StmtClass::firstOMPLoopDirectiveConstant)
        .value("lastOMPLoopDirectiveConstant", clang::Stmt::StmtClass::lastOMPLoopDirectiveConstant)
        .value("OMPMasterDirectiveClass", clang::Stmt::StmtClass::OMPMasterDirectiveClass)
        .value("OMPOrderedDirectiveClass", clang::Stmt::StmtClass::OMPOrderedDirectiveClass)
        .value("OMPParallelDirectiveClass", clang::Stmt::StmtClass::OMPParallelDirectiveClass)
        .value("OMPParallelSectionsDirectiveClass", clang::Stmt::StmtClass::OMPParallelSectionsDirectiveClass)
        .value("OMPSectionDirectiveClass", clang::Stmt::StmtClass::OMPSectionDirectiveClass)
        .value("OMPSectionsDirectiveClass", clang::Stmt::StmtClass::OMPSectionsDirectiveClass)
        .value("OMPSingleDirectiveClass", clang::Stmt::StmtClass::OMPSingleDirectiveClass)
        .value("OMPTargetDataDirectiveClass", clang::Stmt::StmtClass::OMPTargetDataDirectiveClass)
        .value("OMPTargetDirectiveClass", clang::Stmt::StmtClass::OMPTargetDirectiveClass)
        .value("OMPTaskDirectiveClass", clang::Stmt::StmtClass::OMPTaskDirectiveClass)
        .value("OMPTaskgroupDirectiveClass", clang::Stmt::StmtClass::OMPTaskgroupDirectiveClass)
        .value("OMPTaskwaitDirectiveClass", clang::Stmt::StmtClass::OMPTaskwaitDirectiveClass)
        .value("OMPTaskyieldDirectiveClass", clang::Stmt::StmtClass::OMPTaskyieldDirectiveClass)
        .value("OMPTeamsDirectiveClass", clang::Stmt::StmtClass::OMPTeamsDirectiveClass)
        .value("firstOMPExecutableDirectiveConstant", clang::Stmt::StmtClass::firstOMPExecutableDirectiveConstant)
        .value("lastOMPExecutableDirectiveConstant", clang::Stmt::StmtClass::lastOMPExecutableDirectiveConstant)
        .value("ObjCAtCatchStmtClass", clang::Stmt::StmtClass::ObjCAtCatchStmtClass)
        .value("ObjCAtFinallyStmtClass", clang::Stmt::StmtClass::ObjCAtFinallyStmtClass)
        .value("ObjCAtSynchronizedStmtClass", clang::Stmt::StmtClass::ObjCAtSynchronizedStmtClass)
        .value("ObjCAtThrowStmtClass", clang::Stmt::StmtClass::ObjCAtThrowStmtClass)
        .value("ObjCAtTryStmtClass", clang::Stmt::StmtClass::ObjCAtTryStmtClass)
        .value("ObjCAutoreleasePoolStmtClass", clang::Stmt::StmtClass::ObjCAutoreleasePoolStmtClass)
        .value("ObjCForCollectionStmtClass", clang::Stmt::StmtClass::ObjCForCollectionStmtClass)
        .value("ReturnStmtClass", clang::Stmt::StmtClass::ReturnStmtClass)
        .value("SEHExceptStmtClass", clang::Stmt::StmtClass::SEHExceptStmtClass)
        .value("SEHFinallyStmtClass", clang::Stmt::StmtClass::SEHFinallyStmtClass)
        .value("SEHLeaveStmtClass", clang::Stmt::StmtClass::SEHLeaveStmtClass)
        .value("SEHTryStmtClass", clang::Stmt::StmtClass::SEHTryStmtClass)
        .value("CaseStmtClass", clang::Stmt::StmtClass::CaseStmtClass)
        .value("DefaultStmtClass", clang::Stmt::StmtClass::DefaultStmtClass)
        .value("firstSwitchCaseConstant", clang::Stmt::StmtClass::firstSwitchCaseConstant)
        .value("lastSwitchCaseConstant", clang::Stmt::StmtClass::lastSwitchCaseConstant)
        .value("SwitchStmtClass", clang::Stmt::StmtClass::SwitchStmtClass)
        .value("WhileStmtClass", clang::Stmt::StmtClass::WhileStmtClass)
        .value("firstStmtConstant", clang::Stmt::StmtClass::firstStmtConstant)
        .value("lastStmtConstant", clang::Stmt::StmtClass::lastStmtConstant)
        .export_values();
    ;

    py::enum_<clang::StorageClass>(m, "clang_StorageClass")
        .value("SC_None", clang::StorageClass::SC_None)
        .value("SC_Extern", clang::StorageClass::SC_Extern)
        .value("SC_Static", clang::StorageClass::SC_Static)
        .value("SC_PrivateExtern", clang::StorageClass::SC_PrivateExtern)
        .value("SC_Auto", clang::StorageClass::SC_Auto)
        .value("SC_Register", clang::StorageClass::SC_Register)
        .export_values();
    ;

    py::enum_<clang::StorageDuration>(m, "clang_StorageDuration")
        .value("SD_FullExpression", clang::StorageDuration::SD_FullExpression)
        .value("SD_Automatic", clang::StorageDuration::SD_Automatic)
        .value("SD_Thread", clang::StorageDuration::SD_Thread)
        .value("SD_Static", clang::StorageDuration::SD_Static)
        .value("SD_Dynamic", clang::StorageDuration::SD_Dynamic)
        .export_values();
    ;

    py::enum_<clang::StringLiteral::StringKind>(m.attr("StringLiteral"), "clang_StringLiteral_StringKind")
        .value("Ascii", clang::StringLiteral::StringKind::Ascii)
        .value("Wide", clang::StringLiteral::StringKind::Wide)
        .value("UTF8", clang::StringLiteral::StringKind::UTF8)
        .value("UTF16", clang::StringLiteral::StringKind::UTF16)
        .value("UTF32", clang::StringLiteral::StringKind::UTF32)
        .export_values();
    ;

    py::enum_<clang::VarDecl::TLSKind>(m.attr("VarDecl"), "clang_VarDecl_TLSKind")
        .value("TLS_None", clang::VarDecl::TLSKind::TLS_None)
        .value("TLS_Static", clang::VarDecl::TLSKind::TLS_Static)
        .value("TLS_Dynamic", clang::VarDecl::TLSKind::TLS_Dynamic)
        .export_values();
    ;

    py::enum_<clang::TagTypeKind>(m, "clang_TagTypeKind")
        .value("TTK_Struct", clang::TagTypeKind::TTK_Struct)
        .value("TTK_Interface", clang::TagTypeKind::TTK_Interface)
        .value("TTK_Union", clang::TagTypeKind::TTK_Union)
        .value("TTK_Class", clang::TagTypeKind::TTK_Class)
        .value("TTK_Enum", clang::TagTypeKind::TTK_Enum)
        .export_values();
    ;

    py::enum_<clang::TemplateSpecializationKind>(m, "clang_TemplateSpecializationKind")
        .value("TSK_Undeclared", clang::TemplateSpecializationKind::TSK_Undeclared)
        .value("TSK_ImplicitInstantiation", clang::TemplateSpecializationKind::TSK_ImplicitInstantiation)
        .value("TSK_ExplicitSpecialization", clang::TemplateSpecializationKind::TSK_ExplicitSpecialization)
        .value("TSK_ExplicitInstantiationDeclaration", clang::TemplateSpecializationKind::TSK_ExplicitInstantiationDeclaration)
        .value("TSK_ExplicitInstantiationDefinition", clang::TemplateSpecializationKind::TSK_ExplicitInstantiationDefinition)
        .export_values();
    ;

    py::enum_<clang::FunctionDecl::TemplatedKind>(m.attr("FunctionDecl"), "clang_FunctionDecl_TemplatedKind")
        .value("TK_NonTemplate", clang::FunctionDecl::TemplatedKind::TK_NonTemplate)
        .value("TK_FunctionTemplate", clang::FunctionDecl::TemplatedKind::TK_FunctionTemplate)
        .value("TK_MemberSpecialization", clang::FunctionDecl::TemplatedKind::TK_MemberSpecialization)
        .value("TK_FunctionTemplateSpecialization", clang::FunctionDecl::TemplatedKind::TK_FunctionTemplateSpecialization)
        .value("TK_DependentFunctionTemplateSpecialization", clang::FunctionDecl::TemplatedKind::TK_DependentFunctionTemplateSpecialization)
        .export_values();
    ;

    py::enum_<clang::ThreadStorageClassSpecifier>(m, "clang_ThreadStorageClassSpecifier")
        .value("TSCS_unspecified", clang::ThreadStorageClassSpecifier::TSCS_unspecified)
        .value("TSCS___thread", clang::ThreadStorageClassSpecifier::TSCS___thread)
        .value("TSCS_thread_local", clang::ThreadStorageClassSpecifier::TSCS_thread_local)
        .value("TSCS__Thread_local", clang::ThreadStorageClassSpecifier::TSCS__Thread_local)
        .export_values();
    ;

    py::enum_<clang::Type::TypeClass>(m.attr("Type"), "clang_Type_TypeClass")
        .value("Builtin", clang::Type::TypeClass::Builtin)
        .value("Complex", clang::Type::TypeClass::Complex)
        .value("Pointer", clang::Type::TypeClass::Pointer)
        .value("BlockPointer", clang::Type::TypeClass::BlockPointer)
        .value("LValueReference", clang::Type::TypeClass::LValueReference)
        .value("RValueReference", clang::Type::TypeClass::RValueReference)
        .value("MemberPointer", clang::Type::TypeClass::MemberPointer)
        .value("ConstantArray", clang::Type::TypeClass::ConstantArray)
        .value("IncompleteArray", clang::Type::TypeClass::IncompleteArray)
        .value("VariableArray", clang::Type::TypeClass::VariableArray)
        .value("DependentSizedArray", clang::Type::TypeClass::DependentSizedArray)
        .value("DependentSizedExtVector", clang::Type::TypeClass::DependentSizedExtVector)
        .value("Vector", clang::Type::TypeClass::Vector)
        .value("ExtVector", clang::Type::TypeClass::ExtVector)
        .value("FunctionProto", clang::Type::TypeClass::FunctionProto)
        .value("FunctionNoProto", clang::Type::TypeClass::FunctionNoProto)
        .value("UnresolvedUsing", clang::Type::TypeClass::UnresolvedUsing)
        .value("Paren", clang::Type::TypeClass::Paren)
        .value("Typedef", clang::Type::TypeClass::Typedef)
        .value("Adjusted", clang::Type::TypeClass::Adjusted)
        .value("Decayed", clang::Type::TypeClass::Decayed)
        .value("TypeOfExpr", clang::Type::TypeClass::TypeOfExpr)
        .value("TypeOf", clang::Type::TypeClass::TypeOf)
        .value("Decltype", clang::Type::TypeClass::Decltype)
        .value("UnaryTransform", clang::Type::TypeClass::UnaryTransform)
        .value("Record", clang::Type::TypeClass::Record)
        .value("Enum", clang::Type::TypeClass::Enum)
        .value("Elaborated", clang::Type::TypeClass::Elaborated)
        .value("Attributed", clang::Type::TypeClass::Attributed)
        .value("TemplateTypeParm", clang::Type::TypeClass::TemplateTypeParm)
        .value("SubstTemplateTypeParm", clang::Type::TypeClass::SubstTemplateTypeParm)
        .value("SubstTemplateTypeParmPack", clang::Type::TypeClass::SubstTemplateTypeParmPack)
        .value("TemplateSpecialization", clang::Type::TypeClass::TemplateSpecialization)
        .value("Auto", clang::Type::TypeClass::Auto)
        .value("InjectedClassName", clang::Type::TypeClass::InjectedClassName)
        .value("DependentName", clang::Type::TypeClass::DependentName)
        .value("DependentTemplateSpecialization", clang::Type::TypeClass::DependentTemplateSpecialization)
        .value("PackExpansion", clang::Type::TypeClass::PackExpansion)
        .value("ObjCObject", clang::Type::TypeClass::ObjCObject)
        .value("ObjCInterface", clang::Type::TypeClass::ObjCInterface)
        .value("ObjCObjectPointer", clang::Type::TypeClass::ObjCObjectPointer)
        .value("Pipe", clang::Type::TypeClass::Pipe)
        .value("Atomic", clang::Type::TypeClass::Atomic)
        .value("TypeLast", clang::Type::TypeClass::TypeLast)
        .value("TagFirst", clang::Type::TypeClass::TagFirst)
        .value("TagLast", clang::Type::TypeClass::TagLast)
        .export_values();
    ;

    py::enum_<clang::TypeTrait>(m, "clang_TypeTrait")
        .value("UTT_HasNothrowAssign", clang::TypeTrait::UTT_HasNothrowAssign)
        .value("UTT_HasNothrowMoveAssign", clang::TypeTrait::UTT_HasNothrowMoveAssign)
        .value("UTT_HasNothrowCopy", clang::TypeTrait::UTT_HasNothrowCopy)
        .value("UTT_HasNothrowConstructor", clang::TypeTrait::UTT_HasNothrowConstructor)
        .value("UTT_HasTrivialAssign", clang::TypeTrait::UTT_HasTrivialAssign)
        .value("UTT_HasTrivialMoveAssign", clang::TypeTrait::UTT_HasTrivialMoveAssign)
        .value("UTT_HasTrivialCopy", clang::TypeTrait::UTT_HasTrivialCopy)
        .value("UTT_HasTrivialDefaultConstructor", clang::TypeTrait::UTT_HasTrivialDefaultConstructor)
        .value("UTT_HasTrivialMoveConstructor", clang::TypeTrait::UTT_HasTrivialMoveConstructor)
        .value("UTT_HasTrivialDestructor", clang::TypeTrait::UTT_HasTrivialDestructor)
        .value("UTT_HasVirtualDestructor", clang::TypeTrait::UTT_HasVirtualDestructor)
        .value("UTT_IsAbstract", clang::TypeTrait::UTT_IsAbstract)
        .value("UTT_IsArithmetic", clang::TypeTrait::UTT_IsArithmetic)
        .value("UTT_IsArray", clang::TypeTrait::UTT_IsArray)
        .value("UTT_IsClass", clang::TypeTrait::UTT_IsClass)
        .value("UTT_IsCompleteType", clang::TypeTrait::UTT_IsCompleteType)
        .value("UTT_IsCompound", clang::TypeTrait::UTT_IsCompound)
        .value("UTT_IsConst", clang::TypeTrait::UTT_IsConst)
        .value("UTT_IsDestructible", clang::TypeTrait::UTT_IsDestructible)
        .value("UTT_IsEmpty", clang::TypeTrait::UTT_IsEmpty)
        .value("UTT_IsEnum", clang::TypeTrait::UTT_IsEnum)
        .value("UTT_IsFinal", clang::TypeTrait::UTT_IsFinal)
        .value("UTT_IsFloatingPoint", clang::TypeTrait::UTT_IsFloatingPoint)
        .value("UTT_IsFunction", clang::TypeTrait::UTT_IsFunction)
        .value("UTT_IsFundamental", clang::TypeTrait::UTT_IsFundamental)
        .value("UTT_IsIntegral", clang::TypeTrait::UTT_IsIntegral)
        .value("UTT_IsInterfaceClass", clang::TypeTrait::UTT_IsInterfaceClass)
        .value("UTT_IsLiteral", clang::TypeTrait::UTT_IsLiteral)
        .value("UTT_IsLvalueReference", clang::TypeTrait::UTT_IsLvalueReference)
        .value("UTT_IsMemberFunctionPointer", clang::TypeTrait::UTT_IsMemberFunctionPointer)
        .value("UTT_IsMemberObjectPointer", clang::TypeTrait::UTT_IsMemberObjectPointer)
        .value("UTT_IsMemberPointer", clang::TypeTrait::UTT_IsMemberPointer)
        .value("UTT_IsNothrowDestructible", clang::TypeTrait::UTT_IsNothrowDestructible)
        .value("UTT_IsObject", clang::TypeTrait::UTT_IsObject)
        .value("UTT_IsPOD", clang::TypeTrait::UTT_IsPOD)
        .value("UTT_IsPointer", clang::TypeTrait::UTT_IsPointer)
        .value("UTT_IsPolymorphic", clang::TypeTrait::UTT_IsPolymorphic)
        .value("UTT_IsReference", clang::TypeTrait::UTT_IsReference)
        .value("UTT_IsRvalueReference", clang::TypeTrait::UTT_IsRvalueReference)
        .value("UTT_IsScalar", clang::TypeTrait::UTT_IsScalar)
        .value("UTT_IsSealed", clang::TypeTrait::UTT_IsSealed)
        .value("UTT_IsSigned", clang::TypeTrait::UTT_IsSigned)
        .value("UTT_IsStandardLayout", clang::TypeTrait::UTT_IsStandardLayout)
        .value("UTT_IsTrivial", clang::TypeTrait::UTT_IsTrivial)
        .value("UTT_IsTriviallyCopyable", clang::TypeTrait::UTT_IsTriviallyCopyable)
        .value("UTT_IsUnion", clang::TypeTrait::UTT_IsUnion)
        .value("UTT_IsUnsigned", clang::TypeTrait::UTT_IsUnsigned)
        .value("UTT_IsVoid", clang::TypeTrait::UTT_IsVoid)
        .value("UTT_IsVolatile", clang::TypeTrait::UTT_IsVolatile)
        .value("UTT_Last", clang::TypeTrait::UTT_Last)
        .value("BTT_IsBaseOf", clang::TypeTrait::BTT_IsBaseOf)
        .value("BTT_IsConvertible", clang::TypeTrait::BTT_IsConvertible)
        .value("BTT_IsConvertibleTo", clang::TypeTrait::BTT_IsConvertibleTo)
        .value("BTT_IsSame", clang::TypeTrait::BTT_IsSame)
        .value("BTT_TypeCompatible", clang::TypeTrait::BTT_TypeCompatible)
        .value("BTT_IsNothrowAssignable", clang::TypeTrait::BTT_IsNothrowAssignable)
        .value("BTT_IsTriviallyAssignable", clang::TypeTrait::BTT_IsTriviallyAssignable)
        .value("BTT_Last", clang::TypeTrait::BTT_Last)
        .value("TT_IsConstructible", clang::TypeTrait::TT_IsConstructible)
        .value("TT_IsNothrowConstructible", clang::TypeTrait::TT_IsNothrowConstructible)
        .value("TT_IsTriviallyConstructible", clang::TypeTrait::TT_IsTriviallyConstructible)
        .export_values();
    ;

    py::enum_<clang::UnaryExprOrTypeTrait>(m, "clang_UnaryExprOrTypeTrait")
        .value("UETT_SizeOf", clang::UnaryExprOrTypeTrait::UETT_SizeOf)
        .value("UETT_AlignOf", clang::UnaryExprOrTypeTrait::UETT_AlignOf)
        .value("UETT_VecStep", clang::UnaryExprOrTypeTrait::UETT_VecStep)
        .value("UETT_OpenMPRequiredSimdAlign", clang::UnaryExprOrTypeTrait::UETT_OpenMPRequiredSimdAlign)
        .export_values();
    ;

    py::enum_<clang::UnaryOperatorKind>(m, "clang_UnaryOperatorKind")
        .value("UO_PostInc", clang::UnaryOperatorKind::UO_PostInc)
        .value("UO_PostDec", clang::UnaryOperatorKind::UO_PostDec)
        .value("UO_PreInc", clang::UnaryOperatorKind::UO_PreInc)
        .value("UO_PreDec", clang::UnaryOperatorKind::UO_PreDec)
        .value("UO_AddrOf", clang::UnaryOperatorKind::UO_AddrOf)
        .value("UO_Deref", clang::UnaryOperatorKind::UO_Deref)
        .value("UO_Plus", clang::UnaryOperatorKind::UO_Plus)
        .value("UO_Minus", clang::UnaryOperatorKind::UO_Minus)
        .value("UO_Not", clang::UnaryOperatorKind::UO_Not)
        .value("UO_LNot", clang::UnaryOperatorKind::UO_LNot)
        .value("UO_Real", clang::UnaryOperatorKind::UO_Real)
        .value("UO_Imag", clang::UnaryOperatorKind::UO_Imag)
        .value("UO_Extension", clang::UnaryOperatorKind::UO_Extension)
        .value("UO_Coawait", clang::UnaryOperatorKind::UO_Coawait)
        .export_values();
    ;

    py::enum_<clang::Visibility>(m, "clang_Visibility")
        .value("HiddenVisibility", clang::Visibility::HiddenVisibility)
        .value("ProtectedVisibility", clang::Visibility::ProtectedVisibility)
        .value("DefaultVisibility", clang::Visibility::DefaultVisibility)
        .export_values();
    ;

    py::enum_<clang::Expr::isModifiableLvalueResult>(m.attr("Expr"), "clang_Expr_isModifiableLvalueResult")
        .value("MLV_Valid", clang::Expr::isModifiableLvalueResult::MLV_Valid)
        .value("MLV_NotObjectType", clang::Expr::isModifiableLvalueResult::MLV_NotObjectType)
        .value("MLV_IncompleteVoidType", clang::Expr::isModifiableLvalueResult::MLV_IncompleteVoidType)
        .value("MLV_DuplicateVectorComponents", clang::Expr::isModifiableLvalueResult::MLV_DuplicateVectorComponents)
        .value("MLV_InvalidExpression", clang::Expr::isModifiableLvalueResult::MLV_InvalidExpression)
        .value("MLV_LValueCast", clang::Expr::isModifiableLvalueResult::MLV_LValueCast)
        .value("MLV_IncompleteType", clang::Expr::isModifiableLvalueResult::MLV_IncompleteType)
        .value("MLV_ConstQualified", clang::Expr::isModifiableLvalueResult::MLV_ConstQualified)
        .value("MLV_ConstAddrSpace", clang::Expr::isModifiableLvalueResult::MLV_ConstAddrSpace)
        .value("MLV_ArrayType", clang::Expr::isModifiableLvalueResult::MLV_ArrayType)
        .value("MLV_NoSetterProperty", clang::Expr::isModifiableLvalueResult::MLV_NoSetterProperty)
        .value("MLV_MemberFunction", clang::Expr::isModifiableLvalueResult::MLV_MemberFunction)
        .value("MLV_SubObjCPropertySetting", clang::Expr::isModifiableLvalueResult::MLV_SubObjCPropertySetting)
        .value("MLV_InvalidMessageExpression", clang::Expr::isModifiableLvalueResult::MLV_InvalidMessageExpression)
        .value("MLV_ClassTemporary", clang::Expr::isModifiableLvalueResult::MLV_ClassTemporary)
        .value("MLV_ArrayTemporary", clang::Expr::isModifiableLvalueResult::MLV_ArrayTemporary)
        .export_values();
    ;
}
