// ----------------------------------------------------------------------------
// <auto-generated>
// This is autogenerated code by CppSharp.
// Do not edit this file or all your changes will be lost after re-generation.
// </auto-generated>
// ----------------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.Security;
using __CallingConvention = global::System.Runtime.InteropServices.CallingConvention;
using __IntPtr = global::System.IntPtr;
using System.Runtime.CompilerServices;

[assembly:InternalsVisibleTo("CppSharp.Parser")]

#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required

namespace CppSharp
{
    namespace Parser
    {
        namespace AST
        {
            public enum RawCommentKind
            {
                Invalid = 0,
                OrdinaryBCPL = 1,
                OrdinaryC = 2,
                BCPLSlash = 3,
                BCPLExcl = 4,
                JavaDoc = 5,
                Qt = 6,
                Merged = 7
            }

            public enum CommentKind
            {
                FullComment = 0,
                BlockContentComment = 1,
                BlockCommandComment = 2,
                ParamCommandComment = 3,
                TParamCommandComment = 4,
                VerbatimBlockComment = 5,
                VerbatimLineComment = 6,
                ParagraphComment = 7,
                HTMLTagComment = 8,
                HTMLStartTagComment = 9,
                HTMLEndTagComment = 10,
                TextComment = 11,
                InlineContentComment = 12,
                InlineCommandComment = 13,
                VerbatimBlockLineComment = 14
            }

            public enum ArchType
            {
                UnknownArch = 0,
                X86 = 1,
                X86_64 = 2
            }

            public unsafe partial class NativeLibrary : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public partial struct __Internal
                {
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C fileName;
                    internal global::CppSharp.Parser.AST.ArchType archType;
                    internal global::Std.Vector.__Internal Symbols;
                    internal global::Std.Vector.__Internal Dependencies;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibraryC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibraryC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibraryD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary10getSymbolsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetSymbols(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary10addSymbolsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddSymbols(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary12clearSymbolsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearSymbols(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary15getDependenciesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetDependencies(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary15addDependenciesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddDependencies(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary17clearDependenciesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearDependencies(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary15getSymbolsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetSymbolsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13NativeLibrary20getDependenciesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetDependenciesCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.NativeLibrary> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.NativeLibrary>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.NativeLibrary managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.NativeLibrary managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static NativeLibrary __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new NativeLibrary(native.ToPointer(), skipVTables);
                }

                internal static NativeLibrary __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (NativeLibrary)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static NativeLibrary __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new NativeLibrary(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.NativeLibrary.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private NativeLibrary(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected NativeLibrary(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public NativeLibrary()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NativeLibrary.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public NativeLibrary(global::CppSharp.Parser.AST.NativeLibrary _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NativeLibrary.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string GetSymbols(uint i)
                {
                    var ___ret = __Internal.GetSymbols(__Instance, i);
                    return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
                }

                public void AddSymbols(string s)
                {
                    __Internal.AddSymbols(__Instance, s);
                }

                public void ClearSymbols()
                {
                    __Internal.ClearSymbols(__Instance);
                }

                public string GetDependencies(uint i)
                {
                    var ___ret = __Internal.GetDependencies(__Instance, i);
                    return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
                }

                public void AddDependencies(string s)
                {
                    __Internal.AddDependencies(__Instance, s);
                }

                public void ClearDependencies()
                {
                    __Internal.ClearDependencies(__Instance);
                }

                public string FileName
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->fileName));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->fileName), value);
                    }
                }

                public global::CppSharp.Parser.AST.ArchType ArchType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->archType;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->archType = value;
                    }
                }

                public uint SymbolsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetSymbolsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint DependenciesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetDependenciesCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Comment : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 4)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7CommentC2ENS1_11CommentKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.CommentKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7CommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Comment> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Comment>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.Comment managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.Comment managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static Comment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Comment(native.ToPointer(), skipVTables);
                }

                internal static Comment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Comment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Comment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Comment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private Comment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Comment(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public Comment(global::CppSharp.Parser.AST.CommentKind kind)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Comment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public Comment(global::CppSharp.Parser.AST.Comment _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Comment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.Comment.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.Comment.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.Comment(global::CppSharp.Parser.AST.CommentKind kind)
                {
                    return new global::CppSharp.Parser.AST.Comment(kind);
                }

                public global::CppSharp.Parser.AST.CommentKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }
            }

            public unsafe partial class BlockContentComment : global::CppSharp.Parser.AST.Comment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 4)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockContentCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockContentCommentC2ENS1_11CommentKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.CommentKind Kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockContentCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new BlockContentComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BlockContentComment(native.ToPointer(), skipVTables);
                }

                internal static new BlockContentComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BlockContentComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BlockContentComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BlockContentComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private BlockContentComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BlockContentComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BlockContentComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BlockContentComment(global::CppSharp.Parser.AST.CommentKind Kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, Kind);
                }

                public BlockContentComment(global::CppSharp.Parser.AST.BlockContentComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.BlockContentComment.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.BlockContentComment.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.BlockContentComment(global::CppSharp.Parser.AST.CommentKind Kind)
                {
                    return new global::CppSharp.Parser.AST.BlockContentComment(Kind);
                }
            }

            public unsafe partial class FullComment : global::CppSharp.Parser.AST.Comment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal global::Std.Vector.__Internal Blocks;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullComment9getBlocksEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetBlocks(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullComment9addBlocksERPNS1_19BlockContentCommentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddBlocks(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullComment11clearBlocksEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearBlocks(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11FullComment14getBlocksCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetBlocksCount(__IntPtr __instance);
                }

                internal static new FullComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FullComment(native.ToPointer(), skipVTables);
                }

                internal static new FullComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FullComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FullComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FullComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.FullComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private FullComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FullComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FullComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FullComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FullComment(global::CppSharp.Parser.AST.FullComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FullComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.BlockContentComment GetBlocks(uint i)
                {
                    var ___ret = __Internal.GetBlocks(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.BlockContentComment.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddBlocks(global::CppSharp.Parser.AST.BlockContentComment s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddBlocks(__Instance, __arg0);
                }

                public void ClearBlocks()
                {
                    __Internal.ClearBlocks(__Instance);
                }

                public uint BlocksCount
                {
                    get
                    {
                        var ___ret = __Internal.GetBlocksCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class InlineContentComment : global::CppSharp.Parser.AST.Comment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 8)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineContentCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineContentCommentC2ENS1_11CommentKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.CommentKind Kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineContentCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new InlineContentComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new InlineContentComment(native.ToPointer(), skipVTables);
                }

                internal static new InlineContentComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (InlineContentComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static InlineContentComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new InlineContentComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private InlineContentComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected InlineContentComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public InlineContentComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public InlineContentComment(global::CppSharp.Parser.AST.CommentKind Kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, Kind);
                }

                public InlineContentComment(global::CppSharp.Parser.AST.InlineContentComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineContentComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.InlineContentComment.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.InlineContentComment.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.InlineContentComment(global::CppSharp.Parser.AST.CommentKind Kind)
                {
                    return new global::CppSharp.Parser.AST.InlineContentComment(Kind);
                }

                public bool HasTrailingNewline
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTrailingNewline != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTrailingNewline = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class ParagraphComment : global::CppSharp.Parser.AST.BlockContentComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte isWhitespace;
                    internal global::Std.Vector.__Internal Content;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphComment10getContentEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetContent(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphComment10addContentERPNS1_20InlineContentCommentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddContent(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphComment12clearContentEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearContent(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ParagraphComment15getContentCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetContentCount(__IntPtr __instance);
                }

                internal static new ParagraphComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ParagraphComment(native.ToPointer(), skipVTables);
                }

                internal static new ParagraphComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ParagraphComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ParagraphComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ParagraphComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ParagraphComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ParagraphComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ParagraphComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ParagraphComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParagraphComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ParagraphComment(global::CppSharp.Parser.AST.ParagraphComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParagraphComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.InlineContentComment GetContent(uint i)
                {
                    var ___ret = __Internal.GetContent(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.InlineContentComment.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddContent(global::CppSharp.Parser.AST.InlineContentComment s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddContent(__Instance, __arg0);
                }

                public void ClearContent()
                {
                    __Internal.ClearContent(__Instance);
                }

                public bool IsWhitespace
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isWhitespace != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isWhitespace = (byte) (value ? 1 : 0);
                    }
                }

                public uint ContentCount
                {
                    get
                    {
                        var ___ret = __Internal.GetContentCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class BlockCommandComment : global::CppSharp.Parser.AST.BlockContentComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal uint commandId;
                    internal __IntPtr paragraphComment;
                    internal global::Std.Vector.__Internal Arguments;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandCommentC2ENS1_11CommentKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.CommentKind Kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment12addArgumentsERNS2_8ArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                public unsafe partial class Argument : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 32)]
                    public partial struct __Internal
                    {
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment8ArgumentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment8ArgumentC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19BlockCommandComment8ArgumentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void dtor(__IntPtr __instance);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.BlockCommandComment.Argument> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.BlockCommandComment.Argument>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.BlockCommandComment.Argument managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.BlockCommandComment.Argument managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Argument __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Argument(native.ToPointer(), skipVTables);
                    }

                    internal static Argument __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Argument)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Argument __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Argument(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        global::CppSharp.Parser.AST.BlockCommandComment.Argument.__Internal.cctor(ret, new __IntPtr(&native));
                        return ret.ToPointer();
                    }

                    private Argument(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Argument(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Argument()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockCommandComment.Argument.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Argument(global::CppSharp.Parser.AST.BlockCommandComment.Argument _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockCommandComment.Argument.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        if (ReferenceEquals(_0, null))
                            throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                        var __arg0 = _0.__Instance;
                        __Internal.cctor(__Instance, __arg0);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (callNativeDtor)
                            __Internal.dtor(__Instance);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public string Text
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                        }
                    }
                }

                internal static new BlockCommandComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BlockCommandComment(native.ToPointer(), skipVTables);
                }

                internal static new BlockCommandComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BlockCommandComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BlockCommandComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BlockCommandComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.BlockCommandComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private BlockCommandComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BlockCommandComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BlockCommandComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BlockCommandComment(global::CppSharp.Parser.AST.CommentKind Kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, Kind);
                }

                public BlockCommandComment(global::CppSharp.Parser.AST.BlockCommandComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.BlockCommandComment.Argument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.BlockCommandComment.Argument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.BlockCommandComment.Argument.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.BlockCommandComment.Argument.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddArguments(global::CppSharp.Parser.AST.BlockCommandComment.Argument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.BlockCommandComment(global::CppSharp.Parser.AST.CommentKind Kind)
                {
                    return new global::CppSharp.Parser.AST.BlockCommandComment(Kind);
                }

                public uint CommandId
                {
                    get
                    {
                        return ((__Internal*)__Instance)->commandId;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->commandId = value;
                    }
                }

                public global::CppSharp.Parser.AST.ParagraphComment ParagraphComment
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ParagraphComment.__GetOrCreateInstance(((__Internal*)__Instance)->paragraphComment, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->paragraphComment = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class ParamCommandComment : global::CppSharp.Parser.AST.BlockCommandComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal uint commandId;
                    internal __IntPtr paragraphComment;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.ParamCommandComment.PassDirection direction;
                    internal uint paramIndex;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ParamCommandCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ParamCommandCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ParamCommandCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public enum PassDirection : uint
                {
                    In = 0,
                    Out = 1,
                    InOut = 2
                }

                internal static new ParamCommandComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ParamCommandComment(native.ToPointer(), skipVTables);
                }

                internal static new ParamCommandComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ParamCommandComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ParamCommandComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ParamCommandComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ParamCommandComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ParamCommandComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ParamCommandComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ParamCommandComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParamCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ParamCommandComment(global::CppSharp.Parser.AST.ParamCommandComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParamCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ParamCommandComment.PassDirection Direction
                {
                    get
                    {
                        return ((__Internal*)__Instance)->direction;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->direction = value;
                    }
                }

                public uint ParamIndex
                {
                    get
                    {
                        return ((__Internal*)__Instance)->paramIndex;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->paramIndex = value;
                    }
                }
            }

            public unsafe partial class TParamCommandComment : global::CppSharp.Parser.AST.BlockCommandComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal uint commandId;
                    internal __IntPtr paragraphComment;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::Std.Vector.__Internal Position;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandComment11getPositionEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetPosition(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandComment11addPositionERj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddPosition(__IntPtr __instance, uint* s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandComment13clearPositionEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearPosition(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20TParamCommandComment16getPositionCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetPositionCount(__IntPtr __instance);
                }

                internal static new TParamCommandComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TParamCommandComment(native.ToPointer(), skipVTables);
                }

                internal static new TParamCommandComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TParamCommandComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TParamCommandComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TParamCommandComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TParamCommandComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TParamCommandComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TParamCommandComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TParamCommandComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TParamCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TParamCommandComment(global::CppSharp.Parser.AST.TParamCommandComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TParamCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public uint GetPosition(uint i)
                {
                    var ___ret = __Internal.GetPosition(__Instance, i);
                    return ___ret;
                }

                public void AddPosition(ref uint s)
                {
                    fixed (uint* __s0 = &s)
                    {
                        var __arg0 = __s0;
                        __Internal.AddPosition(__Instance, __arg0);
                    }
                }

                public void ClearPosition()
                {
                    __Internal.ClearPosition(__Instance);
                }

                public uint PositionCount
                {
                    get
                    {
                        var ___ret = __Internal.GetPositionCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VerbatimBlockLineComment : global::CppSharp.Parser.AST.Comment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24VerbatimBlockLineCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24VerbatimBlockLineCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24VerbatimBlockLineCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new VerbatimBlockLineComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VerbatimBlockLineComment(native.ToPointer(), skipVTables);
                }

                internal static new VerbatimBlockLineComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VerbatimBlockLineComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VerbatimBlockLineComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VerbatimBlockLineComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VerbatimBlockLineComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VerbatimBlockLineComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VerbatimBlockLineComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VerbatimBlockLineComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimBlockLineComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VerbatimBlockLineComment(global::CppSharp.Parser.AST.VerbatimBlockLineComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimBlockLineComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string Text
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                    }
                }
            }

            public unsafe partial class VerbatimBlockComment : global::CppSharp.Parser.AST.BlockCommandComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal uint commandId;
                    internal __IntPtr paragraphComment;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::Std.Vector.__Internal Lines;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockComment8getLinesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetLines(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockComment8addLinesERPNS1_24VerbatimBlockLineCommentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddLines(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockComment10clearLinesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearLines(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20VerbatimBlockComment13getLinesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetLinesCount(__IntPtr __instance);
                }

                internal static new VerbatimBlockComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VerbatimBlockComment(native.ToPointer(), skipVTables);
                }

                internal static new VerbatimBlockComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VerbatimBlockComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VerbatimBlockComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VerbatimBlockComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VerbatimBlockComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VerbatimBlockComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VerbatimBlockComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VerbatimBlockComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimBlockComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VerbatimBlockComment(global::CppSharp.Parser.AST.VerbatimBlockComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimBlockComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.VerbatimBlockLineComment GetLines(uint i)
                {
                    var ___ret = __Internal.GetLines(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.VerbatimBlockLineComment.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddLines(global::CppSharp.Parser.AST.VerbatimBlockLineComment s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddLines(__Instance, __arg0);
                }

                public void ClearLines()
                {
                    __Internal.ClearLines(__Instance);
                }

                public uint LinesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetLinesCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VerbatimLineComment : global::CppSharp.Parser.AST.BlockCommandComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 72)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal uint commandId;
                    internal __IntPtr paragraphComment;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19VerbatimLineCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19VerbatimLineCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19VerbatimLineCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new VerbatimLineComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VerbatimLineComment(native.ToPointer(), skipVTables);
                }

                internal static new VerbatimLineComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VerbatimLineComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VerbatimLineComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VerbatimLineComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VerbatimLineComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VerbatimLineComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VerbatimLineComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VerbatimLineComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimLineComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VerbatimLineComment(global::CppSharp.Parser.AST.VerbatimLineComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VerbatimLineComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string Text
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                    }
                }
            }

            public unsafe partial class InlineCommandComment : global::CppSharp.Parser.AST.InlineContentComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;
                    internal uint commandId;
                    internal global::CppSharp.Parser.AST.InlineCommandComment.RenderKind commentRenderKind;
                    internal global::Std.Vector.__Internal Arguments;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment12addArgumentsERNS2_8ArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                public enum RenderKind : uint
                {
                    RenderNormal = 0,
                    RenderBold = 1,
                    RenderMonospaced = 2,
                    RenderEmphasized = 3,
                    RenderAnchor = 4
                }

                public unsafe partial class Argument : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 32)]
                    public partial struct __Internal
                    {
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment8ArgumentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment8ArgumentC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20InlineCommandComment8ArgumentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void dtor(__IntPtr __instance);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.InlineCommandComment.Argument> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.InlineCommandComment.Argument>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.InlineCommandComment.Argument managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.InlineCommandComment.Argument managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Argument __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Argument(native.ToPointer(), skipVTables);
                    }

                    internal static Argument __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Argument)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Argument __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Argument(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        global::CppSharp.Parser.AST.InlineCommandComment.Argument.__Internal.cctor(ret, new __IntPtr(&native));
                        return ret.ToPointer();
                    }

                    private Argument(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Argument(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Argument()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineCommandComment.Argument.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Argument(global::CppSharp.Parser.AST.InlineCommandComment.Argument _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineCommandComment.Argument.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        if (ReferenceEquals(_0, null))
                            throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                        var __arg0 = _0.__Instance;
                        __Internal.cctor(__Instance, __arg0);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (callNativeDtor)
                            __Internal.dtor(__Instance);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public string Text
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                        }
                    }
                }

                internal static new InlineCommandComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new InlineCommandComment(native.ToPointer(), skipVTables);
                }

                internal static new InlineCommandComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (InlineCommandComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static InlineCommandComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new InlineCommandComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.InlineCommandComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private InlineCommandComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected InlineCommandComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public InlineCommandComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public InlineCommandComment(global::CppSharp.Parser.AST.InlineCommandComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InlineCommandComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.InlineCommandComment.Argument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.InlineCommandComment.Argument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.InlineCommandComment.Argument.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.InlineCommandComment.Argument.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddArguments(global::CppSharp.Parser.AST.InlineCommandComment.Argument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public uint CommandId
                {
                    get
                    {
                        return ((__Internal*)__Instance)->commandId;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->commandId = value;
                    }
                }

                public global::CppSharp.Parser.AST.InlineCommandComment.RenderKind CommentRenderKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->commentRenderKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->commentRenderKind = value;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class HTMLTagComment : global::CppSharp.Parser.AST.InlineContentComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 8)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14HTMLTagCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14HTMLTagCommentC2ENS1_11CommentKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.CommentKind Kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14HTMLTagCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new HTMLTagComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new HTMLTagComment(native.ToPointer(), skipVTables);
                }

                internal static new HTMLTagComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (HTMLTagComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static HTMLTagComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new HTMLTagComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private HTMLTagComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected HTMLTagComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public HTMLTagComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public HTMLTagComment(global::CppSharp.Parser.AST.CommentKind Kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, Kind);
                }

                public HTMLTagComment(global::CppSharp.Parser.AST.HTMLTagComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.HTMLTagComment.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.HTMLTagComment.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.HTMLTagComment(global::CppSharp.Parser.AST.CommentKind Kind)
                {
                    return new global::CppSharp.Parser.AST.HTMLTagComment(Kind);
                }
            }

            public unsafe partial class HTMLStartTagComment : global::CppSharp.Parser.AST.HTMLTagComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C tagName;
                    internal global::Std.Vector.__Internal Attributes;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment13getAttributesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetAttributes(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment13addAttributesERNS2_9AttributeE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddAttributes(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment15clearAttributesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearAttributes(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment18getAttributesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetAttributesCount(__IntPtr __instance);
                }

                public unsafe partial class Attribute : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 64)]
                    public partial struct __Internal
                    {
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C value;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment9AttributeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment9AttributeC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19HTMLStartTagComment9AttributeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void dtor(__IntPtr __instance);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Attribute __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Attribute(native.ToPointer(), skipVTables);
                    }

                    internal static Attribute __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Attribute)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Attribute __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Attribute(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__Internal.cctor(ret, new __IntPtr(&native));
                        return ret.ToPointer();
                    }

                    private Attribute(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Attribute(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Attribute()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Attribute(global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        if (ReferenceEquals(_0, null))
                            throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                        var __arg0 = _0.__Instance;
                        __Internal.cctor(__Instance, __arg0);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (callNativeDtor)
                            __Internal.dtor(__Instance);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public string Name
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->name));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->name), value);
                        }
                    }

                    public string Value
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->value));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->value), value);
                        }
                    }
                }

                internal static new HTMLStartTagComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new HTMLStartTagComment(native.ToPointer(), skipVTables);
                }

                internal static new HTMLStartTagComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (HTMLStartTagComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static HTMLStartTagComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new HTMLStartTagComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.HTMLStartTagComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private HTMLStartTagComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected HTMLStartTagComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public HTMLStartTagComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLStartTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public HTMLStartTagComment(global::CppSharp.Parser.AST.HTMLStartTagComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLStartTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute GetAttributes(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__Internal();
                    __Internal.GetAttributes(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddAttributes(global::CppSharp.Parser.AST.HTMLStartTagComment.Attribute s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddAttributes(__Instance, __arg0);
                }

                public void ClearAttributes()
                {
                    __Internal.ClearAttributes(__Instance);
                }

                public string TagName
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->tagName));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->tagName), value);
                    }
                }

                public uint AttributesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetAttributesCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class HTMLEndTagComment : global::CppSharp.Parser.AST.HTMLTagComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C tagName;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17HTMLEndTagCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17HTMLEndTagCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17HTMLEndTagCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new HTMLEndTagComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new HTMLEndTagComment(native.ToPointer(), skipVTables);
                }

                internal static new HTMLEndTagComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (HTMLEndTagComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static HTMLEndTagComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new HTMLEndTagComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.HTMLEndTagComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private HTMLEndTagComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected HTMLEndTagComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public HTMLEndTagComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLEndTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public HTMLEndTagComment(global::CppSharp.Parser.AST.HTMLEndTagComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.HTMLEndTagComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string TagName
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->tagName));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->tagName), value);
                    }
                }
            }

            public unsafe partial class TextComment : global::CppSharp.Parser.AST.InlineContentComment, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CommentKind kind;
                    internal byte hasTrailingNewline;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TextCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TextCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TextCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TextComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TextComment(native.ToPointer(), skipVTables);
                }

                internal static new TextComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TextComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TextComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TextComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TextComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TextComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TextComment(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TextComment()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TextComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TextComment(global::CppSharp.Parser.AST.TextComment _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TextComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string Text
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                    }
                }
            }

            public unsafe partial class RawComment : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.RawCommentKind kind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C briefText;
                    internal __IntPtr fullCommentBlock;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10RawCommentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10RawCommentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10RawCommentD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.RawComment> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.RawComment>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.RawComment managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.RawComment managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static RawComment __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new RawComment(native.ToPointer(), skipVTables);
                }

                internal static RawComment __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (RawComment)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static RawComment __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new RawComment(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.RawComment.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private RawComment(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected RawComment(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public RawComment()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.RawComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public RawComment(global::CppSharp.Parser.AST.RawComment _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.RawComment.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.RawCommentKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public string Text
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                    }
                }

                public string BriefText
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->briefText));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->briefText), value);
                    }
                }

                public global::CppSharp.Parser.AST.FullComment FullCommentBlock
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.FullComment.__GetOrCreateInstance(((__Internal*)__Instance)->fullCommentBlock, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->fullCommentBlock = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        public unsafe partial struct SourceLocation
        {
            [StructLayout(LayoutKind.Sequential, Size = 4)]
            public partial struct __Internal
            {
                internal uint ID;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser14SourceLocationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser14SourceLocationC2Ej", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance, uint ID);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser14SourceLocationC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
            }

            private SourceLocation.__Internal __instance;
            internal SourceLocation.__Internal __Instance => __instance;

            internal static SourceLocation __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                return new SourceLocation(native.ToPointer(), skipVTables);
            }

            internal static SourceLocation __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new SourceLocation(native, skipVTables);
            }

            private SourceLocation(__Internal native, bool skipVTables = false)
                : this()
            {
                __instance = native;
            }

            private SourceLocation(void* native, bool skipVTables = false) : this()
            {
                __instance = *(global::CppSharp.Parser.SourceLocation.__Internal*) native;
            }

            public SourceLocation(uint ID)
                : this()
            {
                fixed (__Internal* __instancePtr = &__instance)
                {
                    __Internal.ctor(new __IntPtr(__instancePtr), ID);
                }
            }

            public SourceLocation(global::CppSharp.Parser.SourceLocation _0)
                : this()
            {
                var ____arg0 = _0.__Instance;
                var __arg0 = new __IntPtr(&____arg0);
                fixed (__Internal* __instancePtr = &__instance)
                {
                    __Internal.cctor(new __IntPtr(__instancePtr), __arg0);
                }
            }

            public static implicit operator global::CppSharp.Parser.SourceLocation(uint ID)
            {
                return new global::CppSharp.Parser.SourceLocation(ID);
            }

            public uint ID
            {
                get
                {
                    return __instance.ID;
                }

                set
                {
                    __instance.ID = value;
                }
            }
        }

        public unsafe partial class SourceRange : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 8)]
            public partial struct __Internal
            {
                internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11SourceRangeC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11SourceRangeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.SourceRange> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.SourceRange>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.SourceRange managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.SourceRange managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static SourceRange __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new SourceRange(native.ToPointer(), skipVTables);
            }

            internal static SourceRange __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (SourceRange)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static SourceRange __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new SourceRange(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                *(__Internal*) ret = native;
                return ret.ToPointer();
            }

            private SourceRange(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected SourceRange(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public SourceRange(global::CppSharp.Parser.SourceRange _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.SourceRange.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                *((global::CppSharp.Parser.SourceRange.__Internal*) __Instance) = *((global::CppSharp.Parser.SourceRange.__Internal*) _0.__Instance);
            }

            public SourceRange()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.SourceRange.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public global::CppSharp.Parser.SourceLocation BeginLoc
            {
                get
                {
                    return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->beginLoc);
                }

                set
                {
                    ((__Internal*)__Instance)->beginLoc = value.__Instance;
                }
            }

            public global::CppSharp.Parser.SourceLocation EndLoc
            {
                get
                {
                    return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->endLoc);
                }

                set
                {
                    ((__Internal*)__Instance)->endLoc = value.__Instance;
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        namespace AST
        {
            public enum TypeKind
            {
                Tag = 0,
                Array = 1,
                Function = 2,
                Pointer = 3,
                MemberPointer = 4,
                Typedef = 5,
                Attributed = 6,
                Decayed = 7,
                TemplateSpecialization = 8,
                DependentTemplateSpecialization = 9,
                TemplateParameter = 10,
                TemplateParameterSubstitution = 11,
                InjectedClassName = 12,
                DependentName = 13,
                PackExpansion = 14,
                Builtin = 15,
                UnaryTransform = 16,
                UnresolvedUsing = 17,
                Vector = 18
            }

            public enum CallingConvention
            {
                Default = 0,
                C = 1,
                StdCall = 2,
                ThisCall = 3,
                FastCall = 4,
                Unknown = 5
            }

            public enum PrimitiveType
            {
                Null = 0,
                Void = 1,
                Bool = 2,
                WideChar = 3,
                Char = 4,
                SChar = 5,
                UChar = 6,
                Char16 = 7,
                Char32 = 8,
                Short = 9,
                UShort = 10,
                Int = 11,
                UInt = 12,
                Long = 13,
                ULong = 14,
                LongLong = 15,
                ULongLong = 16,
                Int128 = 17,
                UInt128 = 18,
                Half = 19,
                Float = 20,
                Double = 21,
                LongDouble = 22,
                Float128 = 23,
                IntPtr = 24
            }

            public enum ExceptionSpecType
            {
                None = 0,
                DynamicNone = 1,
                Dynamic = 2,
                MSAny = 3,
                BasicNoexcept = 4,
                DependentNoexcept = 5,
                NoexceptFalse = 6,
                NoexceptTrue = 7,
                Unevaluated = 8,
                Uninstantiated = 9,
                Unparsed = 10
            }

            public unsafe partial class Type : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 8)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4TypeC2ENS1_8TypeKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.TypeKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4TypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Type> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Type>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.Type managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.Type managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static Type __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Type(native.ToPointer(), skipVTables);
                }

                internal static Type __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Type)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Type __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Type(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Type.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Type(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Type(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public Type(global::CppSharp.Parser.AST.TypeKind kind)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Type.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public Type(global::CppSharp.Parser.AST.Type _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Type.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.Type(global::CppSharp.Parser.AST.TypeKind kind)
                {
                    return new global::CppSharp.Parser.AST.Type(kind);
                }

                public global::CppSharp.Parser.AST.TypeKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public bool IsDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDependent = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class TypeQualifiers : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 3)]
                public partial struct __Internal
                {
                    internal byte isConst;
                    internal byte isVolatile;
                    internal byte isRestrict;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14TypeQualifiersC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.TypeQualifiers> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.TypeQualifiers>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.TypeQualifiers managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.TypeQualifiers managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static TypeQualifiers __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypeQualifiers(native.ToPointer(), skipVTables);
                }

                internal static TypeQualifiers __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypeQualifiers)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypeQualifiers __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypeQualifiers(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private TypeQualifiers(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypeQualifiers(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public TypeQualifiers(global::CppSharp.Parser.AST.TypeQualifiers _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeQualifiers.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.TypeQualifiers.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.TypeQualifiers.__Internal*) _0.__Instance);
                }

                public TypeQualifiers()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeQualifiers.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public bool IsConst
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConst != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConst = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsVolatile
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVolatile != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsRestrict
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isRestrict != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isRestrict = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class QualifiedType : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public partial struct __Internal
                {
                    internal __IntPtr type;
                    internal global::CppSharp.Parser.AST.TypeQualifiers.__Internal qualifiers;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13QualifiedTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13QualifiedTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.QualifiedType> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.QualifiedType>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.QualifiedType managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.QualifiedType managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static QualifiedType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new QualifiedType(native.ToPointer(), skipVTables);
                }

                internal static QualifiedType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (QualifiedType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static QualifiedType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new QualifiedType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private QualifiedType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected QualifiedType(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public QualifiedType()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.QualifiedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public QualifiedType(global::CppSharp.Parser.AST.QualifiedType _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.QualifiedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.QualifiedType.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.QualifiedType.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Type Type
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Type.__GetOrCreateInstance(((__Internal*)__Instance)->type, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->type = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TypeQualifiers Qualifiers
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.TypeQualifiers.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiers));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiers = *(global::CppSharp.Parser.AST.TypeQualifiers.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class TagType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal __IntPtr declaration;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7TagTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7TagTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new TagType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TagType(native.ToPointer(), skipVTables);
                }

                internal static new TagType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TagType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TagType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TagType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TagType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TagType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TagType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TagType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TagType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TagType(global::CppSharp.Parser.AST.TagType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TagType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.Declaration Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ArrayType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal global::CppSharp.Parser.AST.ArrayType.ArraySize sizeType;
                    internal long size;
                    internal long elementSize;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ArrayTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ArrayTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum ArraySize
                {
                    Constant = 0,
                    Variable = 1,
                    Dependent = 2,
                    Incomplete = 3
                }

                internal static new ArrayType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ArrayType(native.ToPointer(), skipVTables);
                }

                internal static new ArrayType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ArrayType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ArrayType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ArrayType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ArrayType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ArrayType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ArrayType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ArrayType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ArrayType(global::CppSharp.Parser.AST.ArrayType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.ArrayType.ArraySize SizeType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->sizeType;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->sizeType = value;
                    }
                }

                public long Size
                {
                    get
                    {
                        return ((__Internal*)__Instance)->size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->size = value;
                    }
                }

                public long ElementSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->elementSize;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->elementSize = value;
                    }
                }
            }

            public unsafe partial class FunctionType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal returnType;
                    internal global::CppSharp.Parser.AST.CallingConvention callingConvention;
                    internal global::CppSharp.Parser.AST.ExceptionSpecType exceptionSpecType;
                    internal global::Std.Vector.__Internal Parameters;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionTypeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionType13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionType13addParametersERPNS1_9ParameterE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionType15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearParameters(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12FunctionType18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetParametersCount(__IntPtr __instance);
                }

                internal static new FunctionType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FunctionType(native.ToPointer(), skipVTables);
                }

                internal static new FunctionType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FunctionType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FunctionType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FunctionType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.FunctionType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private FunctionType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FunctionType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FunctionType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FunctionType(global::CppSharp.Parser.AST.FunctionType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Parameter GetParameters(uint i)
                {
                    var ___ret = __Internal.GetParameters(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Parameter.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddParameters(global::CppSharp.Parser.AST.Parameter s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddParameters(__Instance, __arg0);
                }

                public void ClearParameters()
                {
                    __Internal.ClearParameters(__Instance);
                }

                public global::CppSharp.Parser.AST.QualifiedType ReturnType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->returnType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->returnType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CallingConvention CallingConvention
                {
                    get
                    {
                        return ((__Internal*)__Instance)->callingConvention;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->callingConvention = value;
                    }
                }

                public global::CppSharp.Parser.AST.ExceptionSpecType ExceptionSpecType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->exceptionSpecType;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exceptionSpecType = value;
                    }
                }

                public uint ParametersCount
                {
                    get
                    {
                        var ___ret = __Internal.GetParametersCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class PointerType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedPointee;
                    internal global::CppSharp.Parser.AST.PointerType.TypeModifier modifier;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11PointerTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11PointerTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum TypeModifier
                {
                    Value = 0,
                    Pointer = 1,
                    LVReference = 2,
                    RVReference = 3
                }

                internal static new PointerType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PointerType(native.ToPointer(), skipVTables);
                }

                internal static new PointerType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PointerType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PointerType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PointerType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.PointerType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private PointerType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PointerType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public PointerType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PointerType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PointerType(global::CppSharp.Parser.AST.PointerType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PointerType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedPointee
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedPointee));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedPointee = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.PointerType.TypeModifier Modifier
                {
                    get
                    {
                        return ((__Internal*)__Instance)->modifier;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->modifier = value;
                    }
                }
            }

            public unsafe partial class MemberPointerType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal pointee;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17MemberPointerTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17MemberPointerTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new MemberPointerType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MemberPointerType(native.ToPointer(), skipVTables);
                }

                internal static new MemberPointerType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MemberPointerType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MemberPointerType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MemberPointerType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.MemberPointerType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private MemberPointerType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MemberPointerType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MemberPointerType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MemberPointerType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MemberPointerType(global::CppSharp.Parser.AST.MemberPointerType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MemberPointerType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType Pointee
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->pointee));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->pointee = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class TypedefType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal __IntPtr declaration;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TypedefTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TypedefTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new TypedefType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypedefType(native.ToPointer(), skipVTables);
                }

                internal static new TypedefType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypedefType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypedefType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypedefType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypedefType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypedefType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypedefType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypedefType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypedefType(global::CppSharp.Parser.AST.TypedefType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.TypedefNameDecl Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.TypedefNameDecl.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class AttributedType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal modified;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal equivalent;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14AttributedTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14AttributedTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new AttributedType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AttributedType(native.ToPointer(), skipVTables);
                }

                internal static new AttributedType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AttributedType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AttributedType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AttributedType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.AttributedType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private AttributedType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AttributedType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AttributedType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AttributedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AttributedType(global::CppSharp.Parser.AST.AttributedType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AttributedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType Modified
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->modified));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->modified = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Equivalent
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->equivalent));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->equivalent = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class DecayedType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal decayed;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal original;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal pointee;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DecayedTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DecayedTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DecayedType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DecayedType(native.ToPointer(), skipVTables);
                }

                internal static new DecayedType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DecayedType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DecayedType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DecayedType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.DecayedType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private DecayedType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DecayedType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DecayedType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DecayedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DecayedType(global::CppSharp.Parser.AST.DecayedType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DecayedType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType Decayed
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->decayed));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->decayed = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Original
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->original));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->original = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Pointee
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->pointee));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->pointee = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class TemplateArgument : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TemplateArgument.ArgumentKind kind;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal __IntPtr declaration;
                    internal long integral;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16TemplateArgumentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16TemplateArgumentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum ArgumentKind
                {
                    Type = 0,
                    Declaration = 1,
                    NullPtr = 2,
                    Integral = 3,
                    Template = 4,
                    TemplateExpansion = 5,
                    Expression = 6,
                    Pack = 7
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.TemplateArgument> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.TemplateArgument>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.TemplateArgument managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.TemplateArgument managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static TemplateArgument __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateArgument(native.ToPointer(), skipVTables);
                }

                internal static TemplateArgument __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateArgument)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateArgument __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateArgument(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private TemplateArgument(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateArgument(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public TemplateArgument()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateArgument.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TemplateArgument(global::CppSharp.Parser.AST.TemplateArgument _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateArgument.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.TemplateArgument.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.TemplateArgument.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument.ArgumentKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Type
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public long Integral
                {
                    get
                    {
                        return ((__Internal*)__Instance)->integral;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->integral = value;
                    }
                }
            }

            public unsafe partial class TemplateSpecializationType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::Std.Vector.__Internal Arguments;
                    internal __IntPtr _template;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal desugared;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationTypeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationType12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationType12addArgumentsERNS1_16TemplateArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationType14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26TemplateSpecializationType17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new TemplateSpecializationType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateSpecializationType(native.ToPointer(), skipVTables);
                }

                internal static new TemplateSpecializationType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateSpecializationType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateSpecializationType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateSpecializationType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TemplateSpecializationType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TemplateSpecializationType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateSpecializationType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TemplateSpecializationType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateSpecializationType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TemplateSpecializationType(global::CppSharp.Parser.AST.TemplateSpecializationType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateSpecializationType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.TemplateArgument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(___ret);
                }

                public void AddArguments(global::CppSharp.Parser.AST.TemplateArgument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.Template Template
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Template.__GetOrCreateInstance(((__Internal*)__Instance)->_template, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_template = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Desugared
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->desugared));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->desugared = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class DependentTemplateSpecializationType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal desugared;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationTypeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationType12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationType12addArgumentsERNS1_16TemplateArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationType14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST35DependentTemplateSpecializationType17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new DependentTemplateSpecializationType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DependentTemplateSpecializationType(native.ToPointer(), skipVTables);
                }

                internal static new DependentTemplateSpecializationType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DependentTemplateSpecializationType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DependentTemplateSpecializationType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DependentTemplateSpecializationType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.DependentTemplateSpecializationType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private DependentTemplateSpecializationType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DependentTemplateSpecializationType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DependentTemplateSpecializationType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentTemplateSpecializationType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DependentTemplateSpecializationType(global::CppSharp.Parser.AST.DependentTemplateSpecializationType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentTemplateSpecializationType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.TemplateArgument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(___ret);
                }

                public void AddArguments(global::CppSharp.Parser.AST.TemplateArgument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.QualifiedType Desugared
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->desugared));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->desugared = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class TemplateParameterType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal __IntPtr parameter;
                    internal uint depth;
                    internal uint index;
                    internal byte isParameterPack;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TemplateParameterTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TemplateParameterTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TemplateParameterTypeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TemplateParameterType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateParameterType(native.ToPointer(), skipVTables);
                }

                internal static new TemplateParameterType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateParameterType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateParameterType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateParameterType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TemplateParameterType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TemplateParameterType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateParameterType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TemplateParameterType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameterType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TemplateParameterType(global::CppSharp.Parser.AST.TemplateParameterType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameterType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TypeTemplateParameter Parameter
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.TypeTemplateParameter.__GetOrCreateInstance(((__Internal*)__Instance)->parameter, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->parameter = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint Depth
                {
                    get
                    {
                        return ((__Internal*)__Instance)->depth;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->depth = value;
                    }
                }

                public uint Index
                {
                    get
                    {
                        return ((__Internal*)__Instance)->index;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->index = value;
                    }
                }

                public bool IsParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isParameterPack = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class TemplateParameterSubstitutionType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal replacement;
                    internal __IntPtr replacedParameter;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST33TemplateParameterSubstitutionTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST33TemplateParameterSubstitutionTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new TemplateParameterSubstitutionType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateParameterSubstitutionType(native.ToPointer(), skipVTables);
                }

                internal static new TemplateParameterSubstitutionType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateParameterSubstitutionType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateParameterSubstitutionType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateParameterSubstitutionType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TemplateParameterSubstitutionType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TemplateParameterSubstitutionType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateParameterSubstitutionType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TemplateParameterSubstitutionType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameterSubstitutionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TemplateParameterSubstitutionType(global::CppSharp.Parser.AST.TemplateParameterSubstitutionType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameterSubstitutionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType Replacement
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->replacement));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->replacement = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TemplateParameterType ReplacedParameter
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.TemplateParameterType.__GetOrCreateInstance(((__Internal*)__Instance)->replacedParameter, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->replacedParameter = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class InjectedClassNameType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal injectedSpecializationType;
                    internal __IntPtr _class;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21InjectedClassNameTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21InjectedClassNameTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new InjectedClassNameType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new InjectedClassNameType(native.ToPointer(), skipVTables);
                }

                internal static new InjectedClassNameType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (InjectedClassNameType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static InjectedClassNameType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new InjectedClassNameType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.InjectedClassNameType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private InjectedClassNameType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected InjectedClassNameType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public InjectedClassNameType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InjectedClassNameType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public InjectedClassNameType(global::CppSharp.Parser.AST.InjectedClassNameType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InjectedClassNameType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType InjectedSpecializationType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->injectedSpecializationType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->injectedSpecializationType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Class Class
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Class.__GetOrCreateInstance(((__Internal*)__Instance)->_class, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_class = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C identifier;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17DependentNameTypeD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new DependentNameType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DependentNameType(native.ToPointer(), skipVTables);
                }

                internal static new DependentNameType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DependentNameType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DependentNameType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DependentNameType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private DependentNameType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DependentNameType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DependentNameType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DependentNameType(global::CppSharp.Parser.AST.DependentNameType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.QualifiedType Qualifier
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifier));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifier = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public string Identifier
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->identifier));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->identifier), value);
                    }
                }
            }

            public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 8)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new PackExpansionType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PackExpansionType(native.ToPointer(), skipVTables);
                }

                internal static new PackExpansionType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PackExpansionType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PackExpansionType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PackExpansionType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.PackExpansionType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private PackExpansionType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PackExpansionType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public PackExpansionType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PackExpansionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PackExpansionType(global::CppSharp.Parser.AST.PackExpansionType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PackExpansionType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }
            }

            public unsafe partial class UnaryTransformType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal desugared;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal baseType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18UnaryTransformTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18UnaryTransformTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnaryTransformType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnaryTransformType(native.ToPointer(), skipVTables);
                }

                internal static new UnaryTransformType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnaryTransformType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnaryTransformType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnaryTransformType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.UnaryTransformType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private UnaryTransformType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnaryTransformType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnaryTransformType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryTransformType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnaryTransformType(global::CppSharp.Parser.AST.UnaryTransformType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryTransformType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType Desugared
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->desugared));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->desugared = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType BaseType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->baseType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->baseType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class UnresolvedUsingType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal __IntPtr declaration;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19UnresolvedUsingTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19UnresolvedUsingTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnresolvedUsingType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnresolvedUsingType(native.ToPointer(), skipVTables);
                }

                internal static new UnresolvedUsingType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnresolvedUsingType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnresolvedUsingType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnresolvedUsingType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.UnresolvedUsingType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private UnresolvedUsingType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnresolvedUsingType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnresolvedUsingType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedUsingType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnresolvedUsingType(global::CppSharp.Parser.AST.UnresolvedUsingType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedUsingType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.UnresolvedUsingTypename Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.UnresolvedUsingTypename.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class VectorType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal elementType;
                    internal uint numElements;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10VectorTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10VectorTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new VectorType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VectorType(native.ToPointer(), skipVTables);
                }

                internal static new VectorType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VectorType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VectorType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VectorType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VectorType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VectorType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VectorType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VectorType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VectorType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VectorType(global::CppSharp.Parser.AST.VectorType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VectorType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.QualifiedType ElementType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->elementType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->elementType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public uint NumElements
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numElements;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numElements = value;
                    }
                }
            }

            public unsafe partial class BuiltinType : global::CppSharp.Parser.AST.Type, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 12)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.TypeKind kind;
                    internal byte isDependent;
                    internal global::CppSharp.Parser.AST.PrimitiveType type;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11BuiltinTypeC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11BuiltinTypeC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new BuiltinType __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BuiltinType(native.ToPointer(), skipVTables);
                }

                internal static new BuiltinType __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BuiltinType)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BuiltinType __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BuiltinType(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.BuiltinType.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private BuiltinType(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BuiltinType(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BuiltinType()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BuiltinType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BuiltinType(global::CppSharp.Parser.AST.BuiltinType _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BuiltinType.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public global::CppSharp.Parser.AST.PrimitiveType Type
                {
                    get
                    {
                        return ((__Internal*)__Instance)->type;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->type = value;
                    }
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        namespace AST
        {
            public enum DeclarationKind
            {
                DeclarationContext = 0,
                Typedef = 1,
                TypeAlias = 2,
                Parameter = 3,
                Function = 4,
                Method = 5,
                Enumeration = 6,
                EnumerationItem = 7,
                Variable = 8,
                Field = 9,
                AccessSpecifier = 10,
                Class = 11,
                Template = 12,
                TypeAliasTemplate = 13,
                ClassTemplate = 14,
                ClassTemplateSpecialization = 15,
                ClassTemplatePartialSpecialization = 16,
                FunctionTemplate = 17,
                Namespace = 18,
                PreprocessedEntity = 19,
                MacroDefinition = 20,
                MacroExpansion = 21,
                TranslationUnit = 22,
                Friend = 23,
                TemplateTemplateParm = 24,
                TemplateTypeParm = 25,
                NonTypeTemplateParm = 26,
                VarTemplate = 27,
                VarTemplateSpecialization = 28,
                VarTemplatePartialSpecialization = 29,
                UnresolvedUsingTypename = 30
            }

            public enum AccessSpecifier
            {
                Private = 0,
                Protected = 1,
                Public = 2
            }

            public enum MacroLocation
            {
                Unknown = 0,
                ClassHead = 1,
                ClassBody = 2,
                FunctionHead = 3,
                FunctionParameters = 4,
                FunctionBody = 5
            }

            public enum StatementClassObsolete
            {
                Any = 0,
                BinaryOperator = 1,
                CallExprClass = 2,
                DeclRefExprClass = 3,
                CXXConstructExprClass = 4,
                CXXOperatorCallExpr = 5,
                ImplicitCastExpr = 6,
                ExplicitCastExpr = 7
            }

            public enum FriendKind
            {
                None = 0,
                Declared = 1,
                Undeclared = 2
            }

            public enum CXXOperatorKind
            {
                None = 0,
                New = 1,
                Delete = 2,
                ArrayNew = 3,
                ArrayDelete = 4,
                Plus = 5,
                Minus = 6,
                Star = 7,
                Slash = 8,
                Percent = 9,
                Caret = 10,
                Amp = 11,
                Pipe = 12,
                Tilde = 13,
                Exclaim = 14,
                Equal = 15,
                Less = 16,
                Greater = 17,
                PlusEqual = 18,
                MinusEqual = 19,
                StarEqual = 20,
                SlashEqual = 21,
                PercentEqual = 22,
                CaretEqual = 23,
                AmpEqual = 24,
                PipeEqual = 25,
                LessLess = 26,
                GreaterGreater = 27,
                LessLessEqual = 28,
                GreaterGreaterEqual = 29,
                EqualEqual = 30,
                ExclaimEqual = 31,
                LessEqual = 32,
                GreaterEqual = 33,
                Spaceship = 34,
                AmpAmp = 35,
                PipePipe = 36,
                PlusPlus = 37,
                MinusMinus = 38,
                Comma = 39,
                ArrowStar = 40,
                Arrow = 41,
                Call = 42,
                Subscript = 43,
                Conditional = 44,
                Coawait = 45
            }

            public enum TemplateSpecializationKind
            {
                Undeclared = 0,
                ImplicitInstantiation = 1,
                ExplicitSpecialization = 2,
                ExplicitInstantiationDeclaration = 3,
                ExplicitInstantiationDefinition = 4
            }

            public enum CXXMethodKind
            {
                Normal = 0,
                Constructor = 1,
                Destructor = 2,
                Conversion = 3,
                Operator = 4,
                UsingDirective = 5
            }

            public enum RefQualifierKind
            {
                None = 0,
                LValue = 1,
                RValue = 2
            }

            public enum TagKind
            {
                Struct = 0,
                Interface = 1,
                Union = 2,
                Class = 3,
                Enum = 4
            }

            public enum CppAbi
            {
                Itanium = 0,
                Microsoft = 1,
                ARM = 2,
                iOS = 3,
                iOS64 = 4,
                WebAssembly = 5
            }

            public enum RecordArgABI
            {
                /// <summary>
                /// <para>Pass it using the normal C aggregate rules for the ABI,</para>
                /// <para>potentially introducing extra copies and passing some</para>
                /// <para>or all of it in registers.</para>
                /// </summary>
                Default = 0,
                /// <summary>
                /// <para>Pass it on the stack using its defined layout.</para>
                /// <para>The argument must be evaluated directly into the correct</para>
                /// <para>stack position in the arguments area, and the call machinery</para>
                /// <para>must not move it or introduce extra copies.</para>
                /// </summary>
                DirectInMemory = 1,
                /// <summary>Pass it as a pointer to temporary memory.</summary>
                Indirect = 2
            }

            public enum VTableComponentKind
            {
                VCallOffset = 0,
                VBaseOffset = 1,
                OffsetToTop = 2,
                RTTI = 3,
                FunctionPointer = 4,
                CompleteDtorPointer = 5,
                DeletingDtorPointer = 6,
                UnusedFunctionPointer = 7
            }

            public unsafe partial class Declaration : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 224)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DeclarationC2ENS1_15DeclarationKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.DeclarationKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DeclarationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DeclarationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration23getPreprocessedEntitiesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetPreprocessedEntities(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration23addPreprocessedEntitiesERPNS1_18PreprocessedEntityE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddPreprocessedEntities(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration25clearPreprocessedEntitiesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearPreprocessedEntities(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration17getRedeclarationsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetRedeclarations(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration17addRedeclarationsERPS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddRedeclarations(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration19clearRedeclarationsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearRedeclarations(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration28getPreprocessedEntitiesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetPreprocessedEntitiesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Declaration22getRedeclarationsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetRedeclarationsCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Declaration> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Declaration>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.Declaration managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.Declaration managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static Declaration __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Declaration(native.ToPointer(), skipVTables);
                }

                internal static Declaration __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Declaration)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Declaration __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Declaration(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Declaration.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Declaration(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Declaration(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public Declaration(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Declaration.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public Declaration(global::CppSharp.Parser.AST.Declaration _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Declaration.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.PreprocessedEntity GetPreprocessedEntities(uint i)
                {
                    var ___ret = __Internal.GetPreprocessedEntities(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.PreprocessedEntity.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddPreprocessedEntities(global::CppSharp.Parser.AST.PreprocessedEntity s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddPreprocessedEntities(__Instance, __arg0);
                }

                public void ClearPreprocessedEntities()
                {
                    __Internal.ClearPreprocessedEntities(__Instance);
                }

                public global::CppSharp.Parser.AST.Declaration GetRedeclarations(uint i)
                {
                    var ___ret = __Internal.GetRedeclarations(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddRedeclarations(global::CppSharp.Parser.AST.Declaration s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddRedeclarations(__Instance, __arg0);
                }

                public void ClearRedeclarations()
                {
                    __Internal.ClearRedeclarations(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.Declaration(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    return new global::CppSharp.Parser.AST.Declaration(kind);
                }

                public global::CppSharp.Parser.AST.DeclarationKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public int AlignAs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->alignAs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->alignAs = value;
                    }
                }

                public int MaxFieldAlignment
                {
                    get
                    {
                        return ((__Internal*)__Instance)->maxFieldAlignment;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->maxFieldAlignment = value;
                    }
                }

                public global::CppSharp.Parser.AST.AccessSpecifier Access
                {
                    get
                    {
                        return ((__Internal*)__Instance)->access;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->access = value;
                    }
                }

                public global::CppSharp.Parser.AST.DeclarationContext Namespace
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclarationContext.__GetOrCreateInstance(((__Internal*)__Instance)->_namespace, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_namespace = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public int LineNumberStart
                {
                    get
                    {
                        return ((__Internal*)__Instance)->lineNumberStart;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lineNumberStart = value;
                    }
                }

                public int LineNumberEnd
                {
                    get
                    {
                        return ((__Internal*)__Instance)->lineNumberEnd;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lineNumberEnd = value;
                    }
                }

                public string Name
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->name));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->name), value);
                    }
                }

                public string USR
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->USR));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->USR), value);
                    }
                }

                public string DebugText
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->debugText));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->debugText), value);
                    }
                }

                public bool IsIncomplete
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIncomplete != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIncomplete = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDependent = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsImplicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicit = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsInvalid
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isInvalid != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isInvalid = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDeprecated
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDeprecated != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDeprecated = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Declaration CompleteDeclaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->completeDeclaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->completeDeclaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint DefinitionOrder
                {
                    get
                    {
                        return ((__Internal*)__Instance)->definitionOrder;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->definitionOrder = value;
                    }
                }

                public __IntPtr OriginalPtr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->originalPtr;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->originalPtr = (__IntPtr) value;
                    }
                }

                public global::CppSharp.Parser.AST.RawComment Comment
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.RawComment.__GetOrCreateInstance(((__Internal*)__Instance)->comment, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->comment = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint PreprocessedEntitiesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetPreprocessedEntitiesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint RedeclarationsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetRedeclarationsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class DeclarationContext : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 496)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContextC2ENS1_15DeclarationKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.DeclarationKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContextC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContextD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext13getNamespacesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetNamespaces(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext13addNamespacesERPNS1_9NamespaceE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddNamespaces(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext15clearNamespacesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearNamespaces(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext8getEnumsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetEnums(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext8addEnumsERPNS1_11EnumerationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddEnums(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext10clearEnumsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearEnums(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12getFunctionsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetFunctions(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12addFunctionsERPNS1_8FunctionE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddFunctions(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext14clearFunctionsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearFunctions(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext10getClassesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetClasses(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext10addClassesERPNS1_5ClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddClasses(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12clearClassesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearClasses(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12getTemplatesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetTemplates(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12addTemplatesERPNS1_8TemplateE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddTemplates(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext14clearTemplatesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearTemplates(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext11getTypedefsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetTypedefs(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext11addTypedefsERPNS1_11TypedefDeclE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddTypedefs(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext13clearTypedefsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearTypedefs(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext14getTypeAliasesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetTypeAliases(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext14addTypeAliasesERPNS1_9TypeAliasE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddTypeAliases(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext16clearTypeAliasesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearTypeAliases(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12getVariablesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetVariables(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12addVariablesERPNS1_8VariableE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddVariables(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext14clearVariablesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearVariables(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext10getFriendsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetFriends(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext10addFriendsERPNS1_6FriendE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddFriends(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext12clearFriendsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearFriends(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext18getNamespacesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetNamespacesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext13getEnumsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetEnumsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext17getFunctionsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetFunctionsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext15getClassesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetClassesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext17getTemplatesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetTemplatesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext16getTypedefsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetTypedefsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext19getTypeAliasesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetTypeAliasesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext17getVariablesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetVariablesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DeclarationContext15getFriendsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetFriendsCount(__IntPtr __instance);
                }

                internal static new DeclarationContext __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DeclarationContext(native.ToPointer(), skipVTables);
                }

                internal static new DeclarationContext __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DeclarationContext)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DeclarationContext __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DeclarationContext(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.DeclarationContext.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private DeclarationContext(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DeclarationContext(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DeclarationContext(global::CppSharp.Parser.AST.DeclarationKind kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclarationContext.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public DeclarationContext(global::CppSharp.Parser.AST.DeclarationContext _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclarationContext.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Namespace GetNamespaces(uint i)
                {
                    var ___ret = __Internal.GetNamespaces(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Namespace.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddNamespaces(global::CppSharp.Parser.AST.Namespace s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddNamespaces(__Instance, __arg0);
                }

                public void ClearNamespaces()
                {
                    __Internal.ClearNamespaces(__Instance);
                }

                public global::CppSharp.Parser.AST.Enumeration GetEnums(uint i)
                {
                    var ___ret = __Internal.GetEnums(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Enumeration.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddEnums(global::CppSharp.Parser.AST.Enumeration s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddEnums(__Instance, __arg0);
                }

                public void ClearEnums()
                {
                    __Internal.ClearEnums(__Instance);
                }

                public global::CppSharp.Parser.AST.Function GetFunctions(uint i)
                {
                    var ___ret = __Internal.GetFunctions(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddFunctions(global::CppSharp.Parser.AST.Function s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddFunctions(__Instance, __arg0);
                }

                public void ClearFunctions()
                {
                    __Internal.ClearFunctions(__Instance);
                }

                public global::CppSharp.Parser.AST.Class GetClasses(uint i)
                {
                    var ___ret = __Internal.GetClasses(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Class.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddClasses(global::CppSharp.Parser.AST.Class s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddClasses(__Instance, __arg0);
                }

                public void ClearClasses()
                {
                    __Internal.ClearClasses(__Instance);
                }

                public global::CppSharp.Parser.AST.Template GetTemplates(uint i)
                {
                    var ___ret = __Internal.GetTemplates(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Template.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddTemplates(global::CppSharp.Parser.AST.Template s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddTemplates(__Instance, __arg0);
                }

                public void ClearTemplates()
                {
                    __Internal.ClearTemplates(__Instance);
                }

                public global::CppSharp.Parser.AST.TypedefDecl GetTypedefs(uint i)
                {
                    var ___ret = __Internal.GetTypedefs(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.TypedefDecl.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddTypedefs(global::CppSharp.Parser.AST.TypedefDecl s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddTypedefs(__Instance, __arg0);
                }

                public void ClearTypedefs()
                {
                    __Internal.ClearTypedefs(__Instance);
                }

                public global::CppSharp.Parser.AST.TypeAlias GetTypeAliases(uint i)
                {
                    var ___ret = __Internal.GetTypeAliases(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.TypeAlias.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddTypeAliases(global::CppSharp.Parser.AST.TypeAlias s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddTypeAliases(__Instance, __arg0);
                }

                public void ClearTypeAliases()
                {
                    __Internal.ClearTypeAliases(__Instance);
                }

                public global::CppSharp.Parser.AST.Variable GetVariables(uint i)
                {
                    var ___ret = __Internal.GetVariables(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Variable.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddVariables(global::CppSharp.Parser.AST.Variable s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddVariables(__Instance, __arg0);
                }

                public void ClearVariables()
                {
                    __Internal.ClearVariables(__Instance);
                }

                public global::CppSharp.Parser.AST.Friend GetFriends(uint i)
                {
                    var ___ret = __Internal.GetFriends(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Friend.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddFriends(global::CppSharp.Parser.AST.Friend s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddFriends(__Instance, __arg0);
                }

                public void ClearFriends()
                {
                    __Internal.ClearFriends(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.DeclarationContext(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    return new global::CppSharp.Parser.AST.DeclarationContext(kind);
                }

                public bool IsAnonymous
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAnonymous != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAnonymous = (byte) (value ? 1 : 0);
                    }
                }

                public uint NamespacesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetNamespacesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint EnumsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetEnumsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint FunctionsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetFunctionsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint ClassesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetClassesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint TemplatesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetTemplatesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint TypedefsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetTypedefsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint TypeAliasesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetTypeAliasesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint VariablesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetVariablesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint FriendsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetFriendsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class TypedefNameDecl : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 240)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TypedefNameDeclC2ENS1_15DeclarationKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.DeclarationKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TypedefNameDeclC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TypedefNameDeclD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TypedefNameDecl __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypedefNameDecl(native.ToPointer(), skipVTables);
                }

                internal static new TypedefNameDecl __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypedefNameDecl)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypedefNameDecl __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypedefNameDecl(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypedefNameDecl.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypedefNameDecl(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypedefNameDecl(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypedefNameDecl(global::CppSharp.Parser.AST.DeclarationKind kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefNameDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public TypedefNameDecl(global::CppSharp.Parser.AST.TypedefNameDecl _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefNameDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.TypedefNameDecl(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    return new global::CppSharp.Parser.AST.TypedefNameDecl(kind);
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class TypedefDecl : global::CppSharp.Parser.AST.TypedefNameDecl, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 240)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TypedefDeclC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TypedefDeclC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11TypedefDeclD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TypedefDecl __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypedefDecl(native.ToPointer(), skipVTables);
                }

                internal static new TypedefDecl __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypedefDecl)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypedefDecl __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypedefDecl(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypedefDecl.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypedefDecl(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypedefDecl(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypedefDecl()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypedefDecl(global::CppSharp.Parser.AST.TypedefDecl _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypedefDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class TypeAlias : global::CppSharp.Parser.AST.TypedefNameDecl, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 248)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr describedAliasTemplate;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9TypeAliasC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9TypeAliasC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9TypeAliasD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TypeAlias __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypeAlias(native.ToPointer(), skipVTables);
                }

                internal static new TypeAlias __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypeAlias)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypeAlias __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypeAlias(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypeAlias.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypeAlias(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypeAlias(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypeAlias()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeAlias.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypeAlias(global::CppSharp.Parser.AST.TypeAlias _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeAlias.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TypeAliasTemplate DescribedAliasTemplate
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.TypeAliasTemplate.__GetOrCreateInstance(((__Internal*)__Instance)->describedAliasTemplate, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->describedAliasTemplate = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class Friend : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 232)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr declaration;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6FriendC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6FriendC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6FriendD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new Friend __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Friend(native.ToPointer(), skipVTables);
                }

                internal static new Friend __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Friend)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Friend __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Friend(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Friend.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Friend(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Friend(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Friend()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Friend.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Friend(global::CppSharp.Parser.AST.Friend _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Friend.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Declaration Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class StatementObsolete : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StatementClassObsolete _class;
                    internal __IntPtr decl;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17StatementObsoleteC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS1_22StatementClassObsoleteEPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, __IntPtr str, global::CppSharp.Parser.AST.StatementClassObsolete Class, __IntPtr decl);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17StatementObsoleteC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17StatementObsoleteD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.StatementObsolete> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.StatementObsolete>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.StatementObsolete managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.StatementObsolete managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static StatementObsolete __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new StatementObsolete(native.ToPointer(), skipVTables);
                }

                internal static StatementObsolete __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (StatementObsolete)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static StatementObsolete __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new StatementObsolete(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.StatementObsolete.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private StatementObsolete(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected StatementObsolete(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public StatementObsolete(string str, global::CppSharp.Parser.AST.StatementClassObsolete Class, global::CppSharp.Parser.AST.Declaration decl)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StatementObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, str);
                    var __arg0 = __basicString0.__Instance;
                    var __arg2 = decl is null ? __IntPtr.Zero : decl.__Instance;
                    __Internal.ctor(__Instance, __arg0, Class, __arg2);
                    __basicString0.Dispose();
                }

                public StatementObsolete(global::CppSharp.Parser.AST.StatementObsolete _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StatementObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.StatementClassObsolete Class
                {
                    get
                    {
                        return ((__Internal*)__Instance)->_class;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_class = value;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration Decl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->decl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->decl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string String
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->@string));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->@string), value);
                    }
                }
            }

            public unsafe partial class ExpressionObsolete : global::CppSharp.Parser.AST.StatementObsolete, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StatementClassObsolete _class;
                    internal __IntPtr decl;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ExpressionObsoleteC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS1_22StatementClassObsoleteEPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, __IntPtr str, global::CppSharp.Parser.AST.StatementClassObsolete Class, __IntPtr decl);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ExpressionObsoleteC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ExpressionObsoleteD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new ExpressionObsolete __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ExpressionObsolete(native.ToPointer(), skipVTables);
                }

                internal static new ExpressionObsolete __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ExpressionObsolete)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ExpressionObsolete __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ExpressionObsolete(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ExpressionObsolete.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ExpressionObsolete(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ExpressionObsolete(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ExpressionObsolete(string str, global::CppSharp.Parser.AST.StatementClassObsolete Class, global::CppSharp.Parser.AST.Declaration decl)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExpressionObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, str);
                    var __arg0 = __basicString0.__Instance;
                    var __arg2 = decl is null ? __IntPtr.Zero : decl.__Instance;
                    __Internal.ctor(__Instance, __arg0, Class, __arg2);
                    __basicString0.Dispose();
                }

                public ExpressionObsolete(global::CppSharp.Parser.AST.ExpressionObsolete _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExpressionObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class BinaryOperatorObsolete : global::CppSharp.Parser.AST.ExpressionObsolete, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StatementClassObsolete _class;
                    internal __IntPtr decl;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;
                    internal __IntPtr LHS;
                    internal __IntPtr RHS;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C opcodeStr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22BinaryOperatorObsoleteC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS1_18ExpressionObsoleteESC_SA_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, __IntPtr str, __IntPtr lhs, __IntPtr rhs, __IntPtr opcodeStr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22BinaryOperatorObsoleteC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22BinaryOperatorObsoleteD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new BinaryOperatorObsolete __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BinaryOperatorObsolete(native.ToPointer(), skipVTables);
                }

                internal static new BinaryOperatorObsolete __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BinaryOperatorObsolete)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BinaryOperatorObsolete __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BinaryOperatorObsolete(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.BinaryOperatorObsolete.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private BinaryOperatorObsolete(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BinaryOperatorObsolete(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BinaryOperatorObsolete(string str, global::CppSharp.Parser.AST.ExpressionObsolete lhs, global::CppSharp.Parser.AST.ExpressionObsolete rhs, string opcodeStr)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryOperatorObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, str);
                    var __arg0 = __basicString0.__Instance;
                    var __arg1 = lhs is null ? __IntPtr.Zero : lhs.__Instance;
                    var __arg2 = rhs is null ? __IntPtr.Zero : rhs.__Instance;
                    var __basicString3 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString3, opcodeStr);
                    var __arg3 = __basicString3.__Instance;
                    __Internal.ctor(__Instance, __arg0, __arg1, __arg2, __arg3);
                    __basicString0.Dispose();
                    __basicString3.Dispose();
                }

                public BinaryOperatorObsolete(global::CppSharp.Parser.AST.BinaryOperatorObsolete _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryOperatorObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(((__Internal*)__Instance)->LHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->LHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(((__Internal*)__Instance)->RHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->RHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string OpcodeStr
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->opcodeStr));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->opcodeStr), value);
                    }
                }
            }

            public unsafe partial class CallExprObsolete : global::CppSharp.Parser.AST.ExpressionObsolete, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 72)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StatementClassObsolete _class;
                    internal __IntPtr decl;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;
                    internal global::Std.Vector.__Internal Arguments;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsoleteC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, __IntPtr str, __IntPtr decl);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsoleteC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsoleteD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsolete12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetArguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsolete12addArgumentsERPNS1_18ExpressionObsoleteE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsolete14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CallExprObsolete17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new CallExprObsolete __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CallExprObsolete(native.ToPointer(), skipVTables);
                }

                internal static new CallExprObsolete __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CallExprObsolete)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CallExprObsolete __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CallExprObsolete(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CallExprObsolete.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CallExprObsolete(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CallExprObsolete(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CallExprObsolete(string str, global::CppSharp.Parser.AST.Declaration decl)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CallExprObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, str);
                    var __arg0 = __basicString0.__Instance;
                    var __arg1 = decl is null ? __IntPtr.Zero : decl.__Instance;
                    __Internal.ctor(__Instance, __arg0, __arg1);
                    __basicString0.Dispose();
                }

                public CallExprObsolete(global::CppSharp.Parser.AST.CallExprObsolete _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CallExprObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete GetArguments(uint i)
                {
                    var ___ret = __Internal.GetArguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddArguments(global::CppSharp.Parser.AST.ExpressionObsolete s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXConstructExprObsolete : global::CppSharp.Parser.AST.ExpressionObsolete, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 72)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StatementClassObsolete _class;
                    internal __IntPtr decl;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;
                    internal global::Std.Vector.__Internal Arguments;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsoleteC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, __IntPtr str, __IntPtr decl);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsoleteC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsoleteD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsolete12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetArguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsolete12addArgumentsERPNS1_18ExpressionObsoleteE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsolete14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXConstructExprObsolete17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new CXXConstructExprObsolete __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXConstructExprObsolete(native.ToPointer(), skipVTables);
                }

                internal static new CXXConstructExprObsolete __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXConstructExprObsolete)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXConstructExprObsolete __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXConstructExprObsolete(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXConstructExprObsolete.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXConstructExprObsolete(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXConstructExprObsolete(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXConstructExprObsolete(string str, global::CppSharp.Parser.AST.Declaration decl)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstructExprObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, str);
                    var __arg0 = __basicString0.__Instance;
                    var __arg1 = decl is null ? __IntPtr.Zero : decl.__Instance;
                    __Internal.ctor(__Instance, __arg0, __arg1);
                    __basicString0.Dispose();
                }

                public CXXConstructExprObsolete(global::CppSharp.Parser.AST.CXXConstructExprObsolete _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstructExprObsolete.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete GetArguments(uint i)
                {
                    var ___ret = __Internal.GetArguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddArguments(global::CppSharp.Parser.AST.ExpressionObsolete s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Parameter : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 264)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal byte isIndirect;
                    internal byte hasDefaultValue;
                    internal uint index;
                    internal __IntPtr defaultArgument;
                    internal __IntPtr defaultValue;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ParameterC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ParameterD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new Parameter __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Parameter(native.ToPointer(), skipVTables);
                }

                internal static new Parameter __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Parameter)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Parameter __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Parameter(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Parameter.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Parameter(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Parameter(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Parameter()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Parameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Parameter(global::CppSharp.Parser.AST.Parameter _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Parameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool IsIndirect
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIndirect != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIndirect = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasDefaultValue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasDefaultValue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasDefaultValue = (byte) (value ? 1 : 0);
                    }
                }

                public uint Index
                {
                    get
                    {
                        return ((__Internal*)__Instance)->index;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->index = value;
                    }
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete DefaultArgument
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(((__Internal*)__Instance)->defaultArgument, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultArgument = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr DefaultValue
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->defaultValue, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultValue = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class Function : global::CppSharp.Parser.AST.DeclarationContext, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 696)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal returnType;
                    internal byte isReturnIndirect;
                    internal byte hasThisReturn;
                    internal byte isConstExpr;
                    internal byte isVariadic;
                    internal byte isInline;
                    internal byte isPure;
                    internal byte isDeleted;
                    internal byte isDefaulted;
                    internal global::CppSharp.Parser.AST.FriendKind friendKind;
                    internal global::CppSharp.Parser.AST.CXXOperatorKind operatorKind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C mangled;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C signature;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C body;
                    internal __IntPtr bodyStmt;
                    internal global::CppSharp.Parser.AST.CallingConvention callingConvention;
                    internal global::Std.Vector.__Internal Parameters;
                    internal __IntPtr specializationInfo;
                    internal __IntPtr instantiatedFrom;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FunctionC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FunctionC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FunctionD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Function13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Function13addParametersERPNS1_9ParameterE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Function15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearParameters(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Function18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetParametersCount(__IntPtr __instance);
                }

                internal static new Function __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Function(native.ToPointer(), skipVTables);
                }

                internal static new Function __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Function)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Function __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Function(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Function.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Function(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Function(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Function()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Function.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Function(global::CppSharp.Parser.AST.Function _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Function.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Parameter GetParameters(uint i)
                {
                    var ___ret = __Internal.GetParameters(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Parameter.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddParameters(global::CppSharp.Parser.AST.Parameter s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddParameters(__Instance, __arg0);
                }

                public void ClearParameters()
                {
                    __Internal.ClearParameters(__Instance);
                }

                public global::CppSharp.Parser.AST.QualifiedType ReturnType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->returnType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->returnType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool IsReturnIndirect
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isReturnIndirect != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isReturnIndirect = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasThisReturn
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasThisReturn != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasThisReturn = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsConstExpr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConstExpr != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConstExpr = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsVariadic
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVariadic != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVariadic = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsInline
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isInline != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isInline = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPure
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPure != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPure = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDeleted
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDeleted != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDeleted = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDefaulted
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDefaulted != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDefaulted = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.FriendKind FriendKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->friendKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->friendKind = value;
                    }
                }

                public global::CppSharp.Parser.AST.CXXOperatorKind OperatorKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->operatorKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorKind = value;
                    }
                }

                public string Mangled
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->mangled));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->mangled), value);
                    }
                }

                public string Signature
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->signature));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->signature), value);
                    }
                }

                public string Body
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->body));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->body), value);
                    }
                }

                public global::CppSharp.Parser.AST.Stmt BodyStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->bodyStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->bodyStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CallingConvention CallingConvention
                {
                    get
                    {
                        return ((__Internal*)__Instance)->callingConvention;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->callingConvention = value;
                    }
                }

                public global::CppSharp.Parser.AST.FunctionTemplateSpecialization SpecializationInfo
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__GetOrCreateInstance(((__Internal*)__Instance)->specializationInfo, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->specializationInfo = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Function InstantiatedFrom
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->instantiatedFrom, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->instantiatedFrom = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public uint ParametersCount
                {
                    get
                    {
                        var ___ret = __Internal.GetParametersCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 760)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal returnType;
                    internal byte isReturnIndirect;
                    internal byte hasThisReturn;
                    internal byte isConstExpr;
                    internal byte isVariadic;
                    internal byte isInline;
                    internal byte isPure;
                    internal byte isDeleted;
                    internal byte isDefaulted;
                    internal global::CppSharp.Parser.AST.FriendKind friendKind;
                    internal global::CppSharp.Parser.AST.CXXOperatorKind operatorKind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C mangled;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C signature;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C body;
                    internal __IntPtr bodyStmt;
                    internal global::CppSharp.Parser.AST.CallingConvention callingConvention;
                    internal global::Std.Vector.__Internal Parameters;
                    internal __IntPtr specializationInfo;
                    internal __IntPtr instantiatedFrom;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal byte isVirtual;
                    internal byte isStatic;
                    internal byte isConst;
                    internal byte isExplicit;
                    internal byte isVolatile;
                    internal global::CppSharp.Parser.AST.CXXMethodKind methodKind;
                    internal byte isDefaultConstructor;
                    internal byte isCopyConstructor;
                    internal byte isMoveConstructor;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal conversionType;
                    internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier;
                    internal global::Std.Vector.__Internal OverriddenMethods;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6MethodC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6MethodC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6MethodD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6Method20getOverriddenMethodsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetOverriddenMethods(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6Method20addOverriddenMethodsERPS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddOverriddenMethods(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6Method22clearOverriddenMethodsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearOverriddenMethods(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6Method25getOverriddenMethodsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetOverriddenMethodsCount(__IntPtr __instance);
                }

                internal static new Method __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Method(native.ToPointer(), skipVTables);
                }

                internal static new Method __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Method)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Method __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Method(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Method.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Method(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Method(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Method()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Method.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Method(global::CppSharp.Parser.AST.Method _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Method.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i)
                {
                    var ___ret = __Internal.GetOverriddenMethods(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Method.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddOverriddenMethods(__Instance, __arg0);
                }

                public void ClearOverriddenMethods()
                {
                    __Internal.ClearOverriddenMethods(__Instance);
                }

                public bool IsVirtual
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVirtual != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVirtual = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsStatic
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isStatic != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isStatic = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsConst
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConst != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConst = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsExplicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isExplicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isExplicit = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsVolatile
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVolatile != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.CXXMethodKind MethodKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->methodKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->methodKind = value;
                    }
                }

                public bool IsDefaultConstructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDefaultConstructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDefaultConstructor = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsCopyConstructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isCopyConstructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isCopyConstructor = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsMoveConstructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isMoveConstructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isMoveConstructor = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType ConversionType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->conversionType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->conversionType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.RefQualifierKind RefQualifier
                {
                    get
                    {
                        return ((__Internal*)__Instance)->refQualifier;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->refQualifier = value;
                    }
                }

                public uint OverriddenMethodsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetOverriddenMethodsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 536)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::CppSharp.Parser.AST.Enumeration.EnumModifiers modifiers;
                    internal __IntPtr type;
                    internal __IntPtr builtinType;
                    internal global::Std.Vector.__Internal Items;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11EnumerationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11EnumerationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11EnumerationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration8getItemsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetItems(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERPNS2_4ItemE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddItems(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration10clearItemsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearItems(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration14FindItemByNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindItemByName(__IntPtr __instance, __IntPtr Name);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration13getItemsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetItemsCount(__IntPtr __instance);
                }

                [Flags]
                public enum EnumModifiers
                {
                    Anonymous = 1,
                    Scoped = 2,
                    Flags = 4
                }

                public unsafe partial class Item : global::CppSharp.Parser.AST.Declaration, IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 264)]
                    public new partial struct __Internal
                    {
                        internal global::CppSharp.Parser.AST.DeclarationKind kind;
                        internal int alignAs;
                        internal int maxFieldAlignment;
                        internal global::CppSharp.Parser.AST.AccessSpecifier access;
                        internal __IntPtr _namespace;
                        internal global::CppSharp.Parser.SourceLocation.__Internal location;
                        internal int lineNumberStart;
                        internal int lineNumberEnd;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                        internal byte isIncomplete;
                        internal byte isDependent;
                        internal byte isImplicit;
                        internal byte isInvalid;
                        internal byte isDeprecated;
                        internal __IntPtr completeDeclaration;
                        internal uint definitionOrder;
                        internal global::Std.Vector.__Internal PreprocessedEntities;
                        internal global::Std.Vector.__Internal Redeclarations;
                        internal __IntPtr originalPtr;
                        internal __IntPtr comment;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C expression;
                        internal ulong value;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration4ItemC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration4ItemC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11Enumeration4ItemD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void dtor(__IntPtr __instance);
                    }

                    internal static new Item __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Item(native.ToPointer(), skipVTables);
                    }

                    internal static new Item __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Item)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Item __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Item(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        global::CppSharp.Parser.AST.Enumeration.Item.__Internal.cctor(ret, new __IntPtr(&native));
                        return ret.ToPointer();
                    }

                    private Item(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Item(void* native, bool skipVTables = false)
                        : base((void*) native)
                    {
                    }

                    public Item()
                        : this((void*) null)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Enumeration.Item.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Item(global::CppSharp.Parser.AST.Enumeration.Item _0)
                        : this((void*) null)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Enumeration.Item.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        if (ReferenceEquals(_0, null))
                            throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                        var __arg0 = _0.__Instance;
                        __Internal.cctor(__Instance, __arg0);
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected override void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (callNativeDtor)
                            __Internal.dtor(__Instance);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public string Expression
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->expression));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->expression), value);
                        }
                    }

                    public ulong Value
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->value;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->value = value;
                        }
                    }
                }

                internal static new Enumeration __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Enumeration(native.ToPointer(), skipVTables);
                }

                internal static new Enumeration __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Enumeration)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Enumeration __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Enumeration(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Enumeration.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Enumeration(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Enumeration(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Enumeration()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Enumeration.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Enumeration(global::CppSharp.Parser.AST.Enumeration _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Enumeration.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Enumeration.Item GetItems(uint i)
                {
                    var ___ret = __Internal.GetItems(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Enumeration.Item.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddItems(global::CppSharp.Parser.AST.Enumeration.Item s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddItems(__Instance, __arg0);
                }

                public void ClearItems()
                {
                    __Internal.ClearItems(__Instance);
                }

                public global::CppSharp.Parser.AST.Enumeration.Item FindItemByName(string Name)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, Name);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindItemByName(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.Enumeration.Item.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public global::CppSharp.Parser.AST.Enumeration.EnumModifiers Modifiers
                {
                    get
                    {
                        return ((__Internal*)__Instance)->modifiers;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->modifiers = value;
                    }
                }

                public global::CppSharp.Parser.AST.Type Type
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Type.__GetOrCreateInstance(((__Internal*)__Instance)->type, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->type = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.BuiltinType BuiltinType
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.BuiltinType.__GetOrCreateInstance(((__Internal*)__Instance)->builtinType, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinType = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint ItemsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetItemsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Variable : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 288)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal byte isConstExpr;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C mangled;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr initializer;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8VariableC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8VariableC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8VariableD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new Variable __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Variable(native.ToPointer(), skipVTables);
                }

                internal static new Variable __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Variable)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Variable __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Variable(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Variable.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Variable(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Variable(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Variable()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Variable.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Variable(global::CppSharp.Parser.AST.Variable _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Variable.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public bool IsConstExpr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConstExpr != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConstExpr = (byte) (value ? 1 : 0);
                    }
                }

                public string Mangled
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->mangled));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->mangled), value);
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete Initializer
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(((__Internal*)__Instance)->initializer, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->initializer = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class BaseClassSpecifier : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal byte isVirtual;
                    internal __IntPtr type;
                    internal int offset;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18BaseClassSpecifierC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18BaseClassSpecifierC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.BaseClassSpecifier> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.BaseClassSpecifier>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.BaseClassSpecifier managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.BaseClassSpecifier managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static BaseClassSpecifier __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BaseClassSpecifier(native.ToPointer(), skipVTables);
                }

                internal static BaseClassSpecifier __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BaseClassSpecifier)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BaseClassSpecifier __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BaseClassSpecifier(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private BaseClassSpecifier(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BaseClassSpecifier(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public BaseClassSpecifier()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BaseClassSpecifier.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BaseClassSpecifier(global::CppSharp.Parser.AST.BaseClassSpecifier _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BaseClassSpecifier.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.BaseClassSpecifier.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.BaseClassSpecifier.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.AccessSpecifier Access
                {
                    get
                    {
                        return ((__Internal*)__Instance)->access;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->access = value;
                    }
                }

                public bool IsVirtual
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVirtual != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVirtual = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Type Type
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Type.__GetOrCreateInstance(((__Internal*)__Instance)->type, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->type = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public int Offset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->offset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->offset = value;
                    }
                }
            }

            public unsafe partial class Field : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 256)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr _class;
                    internal byte isBitField;
                    internal uint bitWidth;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5FieldC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5FieldC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5FieldD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new Field __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Field(native.ToPointer(), skipVTables);
                }

                internal static new Field __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Field)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Field __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Field(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Field.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Field(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Field(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Field()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Field.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Field(global::CppSharp.Parser.AST.Field _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Field.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Class Class
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Class.__GetOrCreateInstance(((__Internal*)__Instance)->_class, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_class = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsBitField
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isBitField != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isBitField = (byte) (value ? 1 : 0);
                    }
                }

                public uint BitWidth
                {
                    get
                    {
                        return ((__Internal*)__Instance)->bitWidth;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->bitWidth = value;
                    }
                }
            }

            public unsafe partial class AccessSpecifierDecl : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 224)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19AccessSpecifierDeclC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19AccessSpecifierDeclC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19AccessSpecifierDeclD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new AccessSpecifierDecl __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AccessSpecifierDecl(native.ToPointer(), skipVTables);
                }

                internal static new AccessSpecifierDecl __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AccessSpecifierDecl)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AccessSpecifierDecl __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AccessSpecifierDecl(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.AccessSpecifierDecl.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private AccessSpecifierDecl(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AccessSpecifierDecl(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AccessSpecifierDecl()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AccessSpecifierDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AccessSpecifierDecl(global::CppSharp.Parser.AST.AccessSpecifierDecl _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AccessSpecifierDecl.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class VTableComponent : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.VTableComponentKind kind;
                    internal uint offset;
                    internal __IntPtr declaration;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15VTableComponentC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15VTableComponentC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VTableComponent> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VTableComponent>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.VTableComponent managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.VTableComponent managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static VTableComponent __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VTableComponent(native.ToPointer(), skipVTables);
                }

                internal static VTableComponent __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VTableComponent)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VTableComponent __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VTableComponent(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private VTableComponent(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VTableComponent(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public VTableComponent()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VTableComponent.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VTableComponent(global::CppSharp.Parser.AST.VTableComponent _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VTableComponent.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.VTableComponent.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.VTableComponent.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.VTableComponentKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public uint Offset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->offset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->offset = value;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration Declaration
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->declaration, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->declaration = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class VTableLayout : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public partial struct __Internal
                {
                    internal global::Std.Vector.__Internal Components;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayoutC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayoutC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayoutD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayout13getComponentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern global::CppSharp.Parser.AST.VTableComponent.__Internal GetComponents(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayout13addComponentsERNS1_15VTableComponentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddComponents(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayout15clearComponentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearComponents(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12VTableLayout18getComponentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetComponentsCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VTableLayout> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VTableLayout>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.VTableLayout managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.VTableLayout managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static VTableLayout __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VTableLayout(native.ToPointer(), skipVTables);
                }

                internal static VTableLayout __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VTableLayout)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VTableLayout __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VTableLayout(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VTableLayout.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VTableLayout(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VTableLayout(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public VTableLayout()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VTableLayout.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VTableLayout(global::CppSharp.Parser.AST.VTableLayout _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VTableLayout.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.VTableComponent GetComponents(uint i)
                {
                    var ___ret = __Internal.GetComponents(__Instance, i);
                    return global::CppSharp.Parser.AST.VTableComponent.__CreateInstance(___ret);
                }

                public void AddComponents(global::CppSharp.Parser.AST.VTableComponent s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddComponents(__Instance, __arg0);
                }

                public void ClearComponents()
                {
                    __Internal.ClearComponents(__Instance);
                }

                public uint ComponentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetComponentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VFTableInfo : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public partial struct __Internal
                {
                    internal ulong VBTableIndex;
                    internal uint VFPtrOffset;
                    internal uint VFPtrFullOffset;
                    internal global::CppSharp.Parser.AST.VTableLayout.__Internal layout;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VFTableInfoC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VFTableInfoC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VFTableInfoD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VFTableInfo> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.VFTableInfo>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.VFTableInfo managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.VFTableInfo managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static VFTableInfo __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VFTableInfo(native.ToPointer(), skipVTables);
                }

                internal static VFTableInfo __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VFTableInfo)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VFTableInfo __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VFTableInfo(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VFTableInfo.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VFTableInfo(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VFTableInfo(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public VFTableInfo()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VFTableInfo.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VFTableInfo(global::CppSharp.Parser.AST.VFTableInfo _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VFTableInfo.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public ulong VBTableIndex
                {
                    get
                    {
                        return ((__Internal*)__Instance)->VBTableIndex;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->VBTableIndex = value;
                    }
                }

                public uint VFPtrOffset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->VFPtrOffset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->VFPtrOffset = value;
                    }
                }

                public uint VFPtrFullOffset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->VFPtrFullOffset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->VFPtrFullOffset = value;
                    }
                }

                public global::CppSharp.Parser.AST.VTableLayout Layout
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.VTableLayout.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->layout));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->layout = *(global::CppSharp.Parser.AST.VTableLayout.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class LayoutField : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public partial struct __Internal
                {
                    internal uint offset;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr fieldPtr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11LayoutFieldC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11LayoutFieldC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr other);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11LayoutFieldD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.LayoutField> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.LayoutField>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.LayoutField managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.LayoutField managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static LayoutField __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new LayoutField(native.ToPointer(), skipVTables);
                }

                internal static LayoutField __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (LayoutField)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static LayoutField __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new LayoutField(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.LayoutField.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private LayoutField(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected LayoutField(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public LayoutField()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LayoutField.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public LayoutField(global::CppSharp.Parser.AST.LayoutField other)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LayoutField.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(other, null))
                        throw new global::System.ArgumentNullException("other", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = other.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public uint Offset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->offset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->offset = value;
                    }
                }

                public string Name
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->name));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->name), value);
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType QualifiedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->qualifiedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->qualifiedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public __IntPtr FieldPtr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->fieldPtr;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->fieldPtr = (__IntPtr) value;
                    }
                }
            }

            public unsafe partial class LayoutBase : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 16)]
                public partial struct __Internal
                {
                    internal uint offset;
                    internal __IntPtr _class;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LayoutBaseC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LayoutBaseC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr other);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LayoutBaseD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.LayoutBase> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.LayoutBase>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.LayoutBase managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.LayoutBase managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static LayoutBase __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new LayoutBase(native.ToPointer(), skipVTables);
                }

                internal static LayoutBase __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (LayoutBase)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static LayoutBase __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new LayoutBase(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.LayoutBase.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private LayoutBase(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected LayoutBase(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public LayoutBase()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LayoutBase.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public LayoutBase(global::CppSharp.Parser.AST.LayoutBase other)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LayoutBase.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(other, null))
                        throw new global::System.ArgumentNullException("other", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = other.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public uint Offset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->offset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->offset = value;
                    }
                }

                public global::CppSharp.Parser.AST.Class Class
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Class.__GetOrCreateInstance(((__Internal*)__Instance)->_class, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_class = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ClassLayout : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.CppAbi ABI;
                    internal global::CppSharp.Parser.AST.RecordArgABI argABI;
                    internal global::Std.Vector.__Internal VFTables;
                    internal global::CppSharp.Parser.AST.VTableLayout.__Internal layout;
                    internal byte hasOwnVFPtr;
                    internal long VBPtrOffset;
                    internal int alignment;
                    internal int size;
                    internal int dataSize;
                    internal global::Std.Vector.__Internal Fields;
                    internal global::Std.Vector.__Internal Bases;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayoutC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayoutC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayoutD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout11getVFTablesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetVFTables(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout11addVFTablesERNS1_11VFTableInfoE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddVFTables(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout13clearVFTablesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearVFTables(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout9getFieldsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetFields(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout9addFieldsERNS1_11LayoutFieldE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddFields(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout11clearFieldsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearFields(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout8getBasesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetBases(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout8addBasesERNS1_10LayoutBaseE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddBases(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout10clearBasesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearBases(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout16getVFTablesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetVFTablesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout14getFieldsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetFieldsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11ClassLayout13getBasesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetBasesCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.ClassLayout> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.ClassLayout>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.ClassLayout managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.ClassLayout managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static ClassLayout __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ClassLayout(native.ToPointer(), skipVTables);
                }

                internal static ClassLayout __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ClassLayout)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ClassLayout __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ClassLayout(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ClassLayout.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ClassLayout(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ClassLayout(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public ClassLayout()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassLayout.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ClassLayout(global::CppSharp.Parser.AST.ClassLayout _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassLayout.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.VFTableInfo GetVFTables(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.VFTableInfo.__Internal();
                    __Internal.GetVFTables(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.VFTableInfo.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.VFTableInfo.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddVFTables(global::CppSharp.Parser.AST.VFTableInfo s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddVFTables(__Instance, __arg0);
                }

                public void ClearVFTables()
                {
                    __Internal.ClearVFTables(__Instance);
                }

                public global::CppSharp.Parser.AST.LayoutField GetFields(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.LayoutField.__Internal();
                    __Internal.GetFields(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.LayoutField.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.LayoutField.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddFields(global::CppSharp.Parser.AST.LayoutField s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddFields(__Instance, __arg0);
                }

                public void ClearFields()
                {
                    __Internal.ClearFields(__Instance);
                }

                public global::CppSharp.Parser.AST.LayoutBase GetBases(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.LayoutBase.__Internal();
                    __Internal.GetBases(new IntPtr(&___ret), __Instance, i);
                    var _____ret = global::CppSharp.Parser.AST.LayoutBase.__CreateInstance(___ret);
                    global::CppSharp.Parser.AST.LayoutBase.__Internal.dtor(new __IntPtr(&___ret));
                    return _____ret;
                }

                public void AddBases(global::CppSharp.Parser.AST.LayoutBase s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddBases(__Instance, __arg0);
                }

                public void ClearBases()
                {
                    __Internal.ClearBases(__Instance);
                }

                public global::CppSharp.Parser.AST.CppAbi ABI
                {
                    get
                    {
                        return ((__Internal*)__Instance)->ABI;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ABI = value;
                    }
                }

                public global::CppSharp.Parser.AST.RecordArgABI ArgABI
                {
                    get
                    {
                        return ((__Internal*)__Instance)->argABI;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->argABI = value;
                    }
                }

                public global::CppSharp.Parser.AST.VTableLayout Layout
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.VTableLayout.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->layout));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->layout = *(global::CppSharp.Parser.AST.VTableLayout.__Internal*) value.__Instance;
                    }
                }

                public bool HasOwnVFPtr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasOwnVFPtr != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasOwnVFPtr = (byte) (value ? 1 : 0);
                    }
                }

                public long VBPtrOffset
                {
                    get
                    {
                        return ((__Internal*)__Instance)->VBPtrOffset;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->VBPtrOffset = value;
                    }
                }

                public int Alignment
                {
                    get
                    {
                        return ((__Internal*)__Instance)->alignment;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->alignment = value;
                    }
                }

                public int Size
                {
                    get
                    {
                        return ((__Internal*)__Instance)->size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->size = value;
                    }
                }

                public int DataSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->dataSize;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->dataSize = value;
                    }
                }

                public uint VFTablesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetVFTablesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint FieldsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetFieldsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint BasesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetBasesCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Class : global::CppSharp.Parser.AST.DeclarationContext, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 616)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::Std.Vector.__Internal Bases;
                    internal global::Std.Vector.__Internal Fields;
                    internal global::Std.Vector.__Internal Methods;
                    internal global::Std.Vector.__Internal Specifiers;
                    internal byte isPOD;
                    internal byte isAbstract;
                    internal byte isUnion;
                    internal byte isDynamic;
                    internal byte isPolymorphic;
                    internal byte hasNonTrivialDefaultConstructor;
                    internal byte hasNonTrivialCopyConstructor;
                    internal byte hasNonTrivialDestructor;
                    internal byte isExternCContext;
                    internal byte isInjected;
                    internal global::CppSharp.Parser.AST.TagKind tagKind;
                    internal __IntPtr layout;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5ClassC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5ClassC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5ClassD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class8getBasesEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetBases(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class8addBasesERPNS1_18BaseClassSpecifierE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddBases(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class10clearBasesEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearBases(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class9getFieldsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetFields(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class9addFieldsERPNS1_5FieldE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddFields(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class11clearFieldsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearFields(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class10getMethodsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetMethods(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class10addMethodsERPNS1_6MethodE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddMethods(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class12clearMethodsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearMethods(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class13getSpecifiersEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetSpecifiers(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class13addSpecifiersERPNS1_19AccessSpecifierDeclE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddSpecifiers(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class15clearSpecifiersEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearSpecifiers(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class13getBasesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetBasesCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class14getFieldsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetFieldsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class15getMethodsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetMethodsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST5Class18getSpecifiersCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetSpecifiersCount(__IntPtr __instance);
                }

                internal static new Class __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Class(native.ToPointer(), skipVTables);
                }

                internal static new Class __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Class)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Class __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Class(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Class.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Class(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Class(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Class()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Class.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Class(global::CppSharp.Parser.AST.Class _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Class.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.BaseClassSpecifier GetBases(uint i)
                {
                    var ___ret = __Internal.GetBases(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.BaseClassSpecifier.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddBases(global::CppSharp.Parser.AST.BaseClassSpecifier s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddBases(__Instance, __arg0);
                }

                public void ClearBases()
                {
                    __Internal.ClearBases(__Instance);
                }

                public global::CppSharp.Parser.AST.Field GetFields(uint i)
                {
                    var ___ret = __Internal.GetFields(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Field.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddFields(global::CppSharp.Parser.AST.Field s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddFields(__Instance, __arg0);
                }

                public void ClearFields()
                {
                    __Internal.ClearFields(__Instance);
                }

                public global::CppSharp.Parser.AST.Method GetMethods(uint i)
                {
                    var ___ret = __Internal.GetMethods(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Method.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddMethods(global::CppSharp.Parser.AST.Method s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddMethods(__Instance, __arg0);
                }

                public void ClearMethods()
                {
                    __Internal.ClearMethods(__Instance);
                }

                public global::CppSharp.Parser.AST.AccessSpecifierDecl GetSpecifiers(uint i)
                {
                    var ___ret = __Internal.GetSpecifiers(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.AccessSpecifierDecl.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddSpecifiers(global::CppSharp.Parser.AST.AccessSpecifierDecl s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddSpecifiers(__Instance, __arg0);
                }

                public void ClearSpecifiers()
                {
                    __Internal.ClearSpecifiers(__Instance);
                }

                public bool IsPOD
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPOD != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPOD = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsAbstract
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAbstract != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAbstract = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsUnion
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isUnion != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isUnion = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDynamic
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDynamic != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDynamic = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPolymorphic
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPolymorphic != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPolymorphic = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasNonTrivialDefaultConstructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasNonTrivialDefaultConstructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasNonTrivialDefaultConstructor = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasNonTrivialCopyConstructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasNonTrivialCopyConstructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasNonTrivialCopyConstructor = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasNonTrivialDestructor
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasNonTrivialDestructor != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasNonTrivialDestructor = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsExternCContext
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isExternCContext != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isExternCContext = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsInjected
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isInjected != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isInjected = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.TagKind TagKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->tagKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tagKind = value;
                    }
                }

                public global::CppSharp.Parser.AST.ClassLayout Layout
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ClassLayout.__GetOrCreateInstance(((__Internal*)__Instance)->layout, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->layout = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint BasesCount
                {
                    get
                    {
                        var ___ret = __Internal.GetBasesCount(__Instance);
                        return ___ret;
                    }
                }

                public uint FieldsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetFieldsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint MethodsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetMethodsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint SpecifiersCount
                {
                    get
                    {
                        var ___ret = __Internal.GetSpecifiersCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class Template : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 256)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TemplateC2ENS1_15DeclarationKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.DeclarationKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TemplateC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TemplateD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Template13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Template13addParametersERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Template15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearParameters(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8Template18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetParametersCount(__IntPtr __instance);
                }

                internal static new Template __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Template(native.ToPointer(), skipVTables);
                }

                internal static new Template __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Template)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Template __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Template(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Template.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Template(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Template(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Template(global::CppSharp.Parser.AST.DeclarationKind kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Template.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public Template()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Template.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Template(global::CppSharp.Parser.AST.Template _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Template.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
                {
                    var ___ret = __Internal.GetParameters(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddParameters(__Instance, __arg0);
                }

                public void ClearParameters()
                {
                    __Internal.ClearParameters(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.Template(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    return new global::CppSharp.Parser.AST.Template(kind);
                }

                public global::CppSharp.Parser.AST.Declaration TemplatedDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->TemplatedDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->TemplatedDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint ParametersCount
                {
                    get
                    {
                        var ___ret = __Internal.GetParametersCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 256)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TypeAliasTemplate __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypeAliasTemplate(native.ToPointer(), skipVTables);
                }

                internal static new TypeAliasTemplate __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypeAliasTemplate)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypeAliasTemplate __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypeAliasTemplate(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypeAliasTemplate.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypeAliasTemplate(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypeAliasTemplate(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypeAliasTemplate()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeAliasTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypeAliasTemplate(global::CppSharp.Parser.AST.TypeAliasTemplate _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeAliasTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 240)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal uint depth;
                    internal uint index;
                    internal byte isParameterPack;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TemplateParameterC2ENS1_15DeclarationKindE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.DeclarationKind kind);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TemplateParameterC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TemplateParameterD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TemplateParameter __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateParameter(native.ToPointer(), skipVTables);
                }

                internal static new TemplateParameter __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateParameter)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateParameter __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateParameter(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TemplateParameter.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TemplateParameter(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateParameter(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TemplateParameter(global::CppSharp.Parser.AST.DeclarationKind kind)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, kind);
                }

                public TemplateParameter(global::CppSharp.Parser.AST.TemplateParameter _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.TemplateParameter(global::CppSharp.Parser.AST.DeclarationKind kind)
                {
                    return new global::CppSharp.Parser.AST.TemplateParameter(kind);
                }

                public uint Depth
                {
                    get
                    {
                        return ((__Internal*)__Instance)->depth;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->depth = value;
                    }
                }

                public uint Index
                {
                    get
                    {
                        return ((__Internal*)__Instance)->index;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->index = value;
                    }
                }

                public bool IsParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isParameterPack = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class TemplateTemplateParameter : global::CppSharp.Parser.AST.Template, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 264)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;
                    internal byte isParameterPack;
                    internal byte isPackExpansion;
                    internal byte isExpandedParameterPack;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25TemplateTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25TemplateTemplateParameterC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25TemplateTemplateParameterD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TemplateTemplateParameter __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TemplateTemplateParameter(native.ToPointer(), skipVTables);
                }

                internal static new TemplateTemplateParameter __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TemplateTemplateParameter)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TemplateTemplateParameter __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TemplateTemplateParameter(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TemplateTemplateParameter.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TemplateTemplateParameter(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TemplateTemplateParameter(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TemplateTemplateParameter()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TemplateTemplateParameter(global::CppSharp.Parser.AST.TemplateTemplateParameter _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TemplateTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public bool IsParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isParameterPack = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPackExpansion
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPackExpansion != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPackExpansion = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsExpandedParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isExpandedParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class TypeTemplateParameter : global::CppSharp.Parser.AST.TemplateParameter, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 256)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal uint depth;
                    internal uint index;
                    internal byte isParameterPack;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal defaultArgument;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TypeTemplateParameterC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21TypeTemplateParameterD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new TypeTemplateParameter __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypeTemplateParameter(native.ToPointer(), skipVTables);
                }

                internal static new TypeTemplateParameter __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypeTemplateParameter)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypeTemplateParameter __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypeTemplateParameter(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TypeTemplateParameter.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TypeTemplateParameter(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypeTemplateParameter(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypeTemplateParameter()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypeTemplateParameter(global::CppSharp.Parser.AST.TypeTemplateParameter _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.QualifiedType DefaultArgument
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->defaultArgument));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->defaultArgument = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class NonTypeTemplateParameter : global::CppSharp.Parser.AST.TemplateParameter, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 280)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal uint depth;
                    internal uint index;
                    internal byte isParameterPack;
                    internal __IntPtr defaultArgument;
                    internal __IntPtr defaultArgumentNew;
                    internal uint position;
                    internal byte isPackExpansion;
                    internal byte isExpandedParameterPack;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new NonTypeTemplateParameter __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new NonTypeTemplateParameter(native.ToPointer(), skipVTables);
                }

                internal static new NonTypeTemplateParameter __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (NonTypeTemplateParameter)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static NonTypeTemplateParameter __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new NonTypeTemplateParameter(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.NonTypeTemplateParameter.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private NonTypeTemplateParameter(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected NonTypeTemplateParameter(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public NonTypeTemplateParameter()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NonTypeTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public NonTypeTemplateParameter(global::CppSharp.Parser.AST.NonTypeTemplateParameter _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NonTypeTemplateParameter.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ExpressionObsolete DefaultArgument
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ExpressionObsolete.__GetOrCreateInstance(((__Internal*)__Instance)->defaultArgument, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultArgument = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr DefaultArgumentNew
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->defaultArgumentNew, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultArgumentNew = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint Position
                {
                    get
                    {
                        return ((__Internal*)__Instance)->position;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->position = value;
                    }
                }

                public bool IsPackExpansion
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPackExpansion != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPackExpansion = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsExpandedParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isExpandedParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType Type
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 280)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;
                    internal global::Std.Vector.__Internal Specializations;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplateC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplateD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate18getSpecializationsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetSpecializations(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate18addSpecializationsERPNS1_27ClassTemplateSpecializationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddSpecializations(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate20clearSpecializationsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearSpecializations(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate18FindSpecializationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindSpecialization(__IntPtr __instance, __IntPtr usr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate25FindPartialSpecializationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindPartialSpecialization(__IntPtr __instance, __IntPtr usr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ClassTemplate23getSpecializationsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetSpecializationsCount(__IntPtr __instance);
                }

                internal static new ClassTemplate __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ClassTemplate(native.ToPointer(), skipVTables);
                }

                internal static new ClassTemplate __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ClassTemplate)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ClassTemplate __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ClassTemplate(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ClassTemplate.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ClassTemplate(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ClassTemplate(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ClassTemplate()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ClassTemplate(global::CppSharp.Parser.AST.ClassTemplate _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.ClassTemplateSpecialization GetSpecializations(uint i)
                {
                    var ___ret = __Internal.GetSpecializations(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.ClassTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddSpecializations(global::CppSharp.Parser.AST.ClassTemplateSpecialization s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddSpecializations(__Instance, __arg0);
                }

                public void ClearSpecializations()
                {
                    __Internal.ClearSpecializations(__Instance);
                }

                public global::CppSharp.Parser.AST.ClassTemplateSpecialization FindSpecialization(string usr)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, usr);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindSpecialization(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.ClassTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization FindPartialSpecialization(string usr)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, usr);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindPartialSpecialization(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public uint SpecializationsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetSpecializationsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class ClassTemplateSpecialization : global::CppSharp.Parser.AST.Class, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 656)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::Std.Vector.__Internal Bases;
                    internal global::Std.Vector.__Internal Fields;
                    internal global::Std.Vector.__Internal Methods;
                    internal global::Std.Vector.__Internal Specifiers;
                    internal byte isPOD;
                    internal byte isAbstract;
                    internal byte isUnion;
                    internal byte isDynamic;
                    internal byte isPolymorphic;
                    internal byte hasNonTrivialDefaultConstructor;
                    internal byte hasNonTrivialCopyConstructor;
                    internal byte hasNonTrivialDestructor;
                    internal byte isExternCContext;
                    internal byte isInjected;
                    internal global::CppSharp.Parser.AST.TagKind tagKind;
                    internal __IntPtr layout;
                    internal __IntPtr templatedDecl;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecializationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecialization12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecialization12addArgumentsERNS1_16TemplateArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecialization14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27ClassTemplateSpecialization17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new ClassTemplateSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ClassTemplateSpecialization(native.ToPointer(), skipVTables);
                }

                internal static new ClassTemplateSpecialization __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ClassTemplateSpecialization)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ClassTemplateSpecialization __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ClassTemplateSpecialization(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ClassTemplateSpecialization.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ClassTemplateSpecialization(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ClassTemplateSpecialization(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ClassTemplateSpecialization()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ClassTemplateSpecialization(global::CppSharp.Parser.AST.ClassTemplateSpecialization _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.TemplateArgument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(___ret);
                }

                public void AddArguments(global::CppSharp.Parser.AST.TemplateArgument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.ClassTemplate TemplatedDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.ClassTemplate.__GetOrCreateInstance(((__Internal*)__Instance)->templatedDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templatedDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->specializationKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->specializationKind = value;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 656)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal global::Std.Vector.__Internal Bases;
                    internal global::Std.Vector.__Internal Fields;
                    internal global::Std.Vector.__Internal Methods;
                    internal global::Std.Vector.__Internal Specifiers;
                    internal byte isPOD;
                    internal byte isAbstract;
                    internal byte isUnion;
                    internal byte isDynamic;
                    internal byte isPolymorphic;
                    internal byte hasNonTrivialDefaultConstructor;
                    internal byte hasNonTrivialCopyConstructor;
                    internal byte hasNonTrivialDestructor;
                    internal byte isExternCContext;
                    internal byte isInjected;
                    internal global::CppSharp.Parser.AST.TagKind tagKind;
                    internal __IntPtr layout;
                    internal __IntPtr templatedDecl;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ClassTemplatePartialSpecialization(native.ToPointer(), skipVTables);
                }

                internal static new ClassTemplatePartialSpecialization __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ClassTemplatePartialSpecialization)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ClassTemplatePartialSpecialization __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ClassTemplatePartialSpecialization(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ClassTemplatePartialSpecialization(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ClassTemplatePartialSpecialization(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ClassTemplatePartialSpecialization()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ClassTemplatePartialSpecialization(global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ClassTemplatePartialSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 280)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;
                    internal global::Std.Vector.__Internal Specializations;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplateC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplateD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplate18getSpecializationsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetSpecializations(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplate18addSpecializationsERPNS1_30FunctionTemplateSpecializationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddSpecializations(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplate20clearSpecializationsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearSpecializations(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplate18FindSpecializationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindSpecialization(__IntPtr __instance, __IntPtr usr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16FunctionTemplate23getSpecializationsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetSpecializationsCount(__IntPtr __instance);
                }

                internal static new FunctionTemplate __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FunctionTemplate(native.ToPointer(), skipVTables);
                }

                internal static new FunctionTemplate __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FunctionTemplate)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FunctionTemplate __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FunctionTemplate(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.FunctionTemplate.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private FunctionTemplate(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FunctionTemplate(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FunctionTemplate()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FunctionTemplate(global::CppSharp.Parser.AST.FunctionTemplate _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.FunctionTemplateSpecialization GetSpecializations(uint i)
                {
                    var ___ret = __Internal.GetSpecializations(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddSpecializations(global::CppSharp.Parser.AST.FunctionTemplateSpecialization s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddSpecializations(__Instance, __arg0);
                }

                public void ClearSpecializations()
                {
                    __Internal.ClearSpecializations(__Instance);
                }

                public global::CppSharp.Parser.AST.FunctionTemplateSpecialization FindSpecialization(string usr)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, usr);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindSpecialization(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public uint SpecializationsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetSpecializationsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class FunctionTemplateSpecialization : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public partial struct __Internal
                {
                    internal __IntPtr _template;
                    internal global::Std.Vector.__Internal Arguments;
                    internal __IntPtr specializedFunction;
                    internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecializationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecialization12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecialization12addArgumentsERNS1_16TemplateArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecialization14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST30FunctionTemplateSpecialization17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.FunctionTemplateSpecialization> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.FunctionTemplateSpecialization>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.FunctionTemplateSpecialization managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.FunctionTemplateSpecialization managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static FunctionTemplateSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FunctionTemplateSpecialization(native.ToPointer(), skipVTables);
                }

                internal static FunctionTemplateSpecialization __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FunctionTemplateSpecialization)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FunctionTemplateSpecialization __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FunctionTemplateSpecialization(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private FunctionTemplateSpecialization(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FunctionTemplateSpecialization(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public FunctionTemplateSpecialization()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FunctionTemplateSpecialization(global::CppSharp.Parser.AST.FunctionTemplateSpecialization _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.TemplateArgument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(___ret);
                }

                public void AddArguments(global::CppSharp.Parser.AST.TemplateArgument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.FunctionTemplate Template
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.FunctionTemplate.__GetOrCreateInstance(((__Internal*)__Instance)->_template, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_template = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Function SpecializedFunction
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->specializedFunction, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->specializedFunction = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->specializationKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->specializationKind = value;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VarTemplate : global::CppSharp.Parser.AST.Template, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 280)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal __IntPtr TemplatedDecl;
                    internal global::Std.Vector.__Internal Parameters;
                    internal global::Std.Vector.__Internal Specializations;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplateC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplateD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate18getSpecializationsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetSpecializations(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate18addSpecializationsERPNS1_25VarTemplateSpecializationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddSpecializations(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate20clearSpecializationsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearSpecializations(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate18FindSpecializationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindSpecialization(__IntPtr __instance, __IntPtr usr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate25FindPartialSpecializationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindPartialSpecialization(__IntPtr __instance, __IntPtr usr);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11VarTemplate23getSpecializationsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetSpecializationsCount(__IntPtr __instance);
                }

                internal static new VarTemplate __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VarTemplate(native.ToPointer(), skipVTables);
                }

                internal static new VarTemplate __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VarTemplate)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VarTemplate __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VarTemplate(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VarTemplate.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VarTemplate(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VarTemplate(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VarTemplate()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VarTemplate(global::CppSharp.Parser.AST.VarTemplate _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplate.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.VarTemplateSpecialization GetSpecializations(uint i)
                {
                    var ___ret = __Internal.GetSpecializations(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.VarTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddSpecializations(global::CppSharp.Parser.AST.VarTemplateSpecialization s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddSpecializations(__Instance, __arg0);
                }

                public void ClearSpecializations()
                {
                    __Internal.ClearSpecializations(__Instance);
                }

                public global::CppSharp.Parser.AST.VarTemplateSpecialization FindSpecialization(string usr)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, usr);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindSpecialization(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.VarTemplateSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public global::CppSharp.Parser.AST.VarTemplatePartialSpecialization FindPartialSpecialization(string usr)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, usr);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindPartialSpecialization(__Instance, __arg0);
                    __basicString0.Dispose();
                    var __result0 = global::CppSharp.Parser.AST.VarTemplatePartialSpecialization.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public uint SpecializationsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetSpecializationsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VarTemplateSpecialization : global::CppSharp.Parser.AST.Variable, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 328)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal byte isConstExpr;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C mangled;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr initializer;
                    internal __IntPtr templatedDecl;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecializationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecialization12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void GetArguments(__IntPtr @return, __IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecialization12addArgumentsERNS1_16TemplateArgumentE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecialization14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25VarTemplateSpecialization17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetArgumentsCount(__IntPtr __instance);
                }

                internal static new VarTemplateSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VarTemplateSpecialization(native.ToPointer(), skipVTables);
                }

                internal static new VarTemplateSpecialization __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VarTemplateSpecialization)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VarTemplateSpecialization __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VarTemplateSpecialization(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VarTemplateSpecialization.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VarTemplateSpecialization(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VarTemplateSpecialization(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VarTemplateSpecialization()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VarTemplateSpecialization(global::CppSharp.Parser.AST.VarTemplateSpecialization _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplateSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TemplateArgument GetArguments(uint i)
                {
                    var ___ret = new global::CppSharp.Parser.AST.TemplateArgument.__Internal();
                    __Internal.GetArguments(new IntPtr(&___ret), __Instance, i);
                    return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(___ret);
                }

                public void AddArguments(global::CppSharp.Parser.AST.TemplateArgument s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = s.__Instance;
                    __Internal.AddArguments(__Instance, __arg0);
                }

                public void ClearArguments()
                {
                    __Internal.ClearArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.VarTemplate TemplatedDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.VarTemplate.__GetOrCreateInstance(((__Internal*)__Instance)->templatedDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templatedDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->specializationKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->specializationKind = value;
                    }
                }

                public uint ArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class VarTemplatePartialSpecialization : global::CppSharp.Parser.AST.VarTemplateSpecialization, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 328)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal byte isConstExpr;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C mangled;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal qualifiedType;
                    internal __IntPtr initializer;
                    internal __IntPtr templatedDecl;
                    internal global::Std.Vector.__Internal Arguments;
                    internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST32VarTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST32VarTemplatePartialSpecializationC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST32VarTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new VarTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VarTemplatePartialSpecialization(native.ToPointer(), skipVTables);
                }

                internal static new VarTemplatePartialSpecialization __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VarTemplatePartialSpecialization)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VarTemplatePartialSpecialization __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VarTemplatePartialSpecialization(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.VarTemplatePartialSpecialization.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private VarTemplatePartialSpecialization(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VarTemplatePartialSpecialization(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VarTemplatePartialSpecialization()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplatePartialSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VarTemplatePartialSpecialization(global::CppSharp.Parser.AST.VarTemplatePartialSpecialization _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VarTemplatePartialSpecialization.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class UnresolvedUsingTypename : global::CppSharp.Parser.AST.Declaration, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 224)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23UnresolvedUsingTypenameC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23UnresolvedUsingTypenameC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23UnresolvedUsingTypenameD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new UnresolvedUsingTypename __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnresolvedUsingTypename(native.ToPointer(), skipVTables);
                }

                internal static new UnresolvedUsingTypename __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnresolvedUsingTypename)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnresolvedUsingTypename __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnresolvedUsingTypename(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.UnresolvedUsingTypename.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private UnresolvedUsingTypename(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnresolvedUsingTypename(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnresolvedUsingTypename()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedUsingTypename.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnresolvedUsingTypename(global::CppSharp.Parser.AST.UnresolvedUsingTypename _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedUsingTypename.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class Namespace : global::CppSharp.Parser.AST.DeclarationContext, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 496)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal byte isInline;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9NamespaceC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9NamespaceC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9NamespaceD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new Namespace __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Namespace(native.ToPointer(), skipVTables);
                }

                internal static new Namespace __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Namespace)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Namespace __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Namespace(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.Namespace.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private Namespace(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Namespace(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Namespace()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Namespace.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Namespace(global::CppSharp.Parser.AST.Namespace _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Namespace.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public bool IsInline
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isInline != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isInline = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class PreprocessedEntity : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.MacroLocation macroLocation;
                    internal __IntPtr originalPtr;
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18PreprocessedEntityC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18PreprocessedEntityC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.PreprocessedEntity> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.PreprocessedEntity>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.PreprocessedEntity managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.PreprocessedEntity managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static PreprocessedEntity __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PreprocessedEntity(native.ToPointer(), skipVTables);
                }

                internal static PreprocessedEntity __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PreprocessedEntity)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PreprocessedEntity __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PreprocessedEntity(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private PreprocessedEntity(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PreprocessedEntity(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public PreprocessedEntity()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PreprocessedEntity.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PreprocessedEntity(global::CppSharp.Parser.AST.PreprocessedEntity _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PreprocessedEntity.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.PreprocessedEntity.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.PreprocessedEntity.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.MacroLocation MacroLocation
                {
                    get
                    {
                        return ((__Internal*)__Instance)->macroLocation;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->macroLocation = value;
                    }
                }

                public __IntPtr OriginalPtr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->originalPtr;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->originalPtr = (__IntPtr) value;
                    }
                }

                public global::CppSharp.Parser.AST.DeclarationKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }
            }

            public unsafe partial class MacroDefinition : global::CppSharp.Parser.AST.PreprocessedEntity, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.MacroLocation macroLocation;
                    internal __IntPtr originalPtr;
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C expression;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15MacroDefinitionC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15MacroDefinitionC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15MacroDefinitionD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new MacroDefinition __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MacroDefinition(native.ToPointer(), skipVTables);
                }

                internal static new MacroDefinition __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MacroDefinition)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MacroDefinition __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MacroDefinition(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.MacroDefinition.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private MacroDefinition(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MacroDefinition(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MacroDefinition()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MacroDefinition.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MacroDefinition(global::CppSharp.Parser.AST.MacroDefinition _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MacroDefinition.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string Name
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->name));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->name), value);
                    }
                }

                public string Expression
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->expression));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->expression), value);
                    }
                }

                public int LineNumberStart
                {
                    get
                    {
                        return ((__Internal*)__Instance)->lineNumberStart;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lineNumberStart = value;
                    }
                }

                public int LineNumberEnd
                {
                    get
                    {
                        return ((__Internal*)__Instance)->lineNumberEnd;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lineNumberEnd = value;
                    }
                }
            }

            public unsafe partial class MacroExpansion : global::CppSharp.Parser.AST.PreprocessedEntity, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.MacroLocation macroLocation;
                    internal __IntPtr originalPtr;
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C text;
                    internal __IntPtr definition;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14MacroExpansionC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14MacroExpansionC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14MacroExpansionD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new MacroExpansion __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MacroExpansion(native.ToPointer(), skipVTables);
                }

                internal static new MacroExpansion __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MacroExpansion)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MacroExpansion __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MacroExpansion(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.MacroExpansion.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private MacroExpansion(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MacroExpansion(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MacroExpansion()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MacroExpansion.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MacroExpansion(global::CppSharp.Parser.AST.MacroExpansion _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MacroExpansion.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string Name
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->name));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->name), value);
                    }
                }

                public string Text
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->text));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->text), value);
                    }
                }

                public global::CppSharp.Parser.AST.MacroDefinition Definition
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.MacroDefinition.__GetOrCreateInstance(((__Internal*)__Instance)->definition, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->definition = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class TranslationUnit : global::CppSharp.Parser.AST.Namespace, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 560)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.DeclarationKind kind;
                    internal int alignAs;
                    internal int maxFieldAlignment;
                    internal global::CppSharp.Parser.AST.AccessSpecifier access;
                    internal __IntPtr _namespace;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal int lineNumberStart;
                    internal int lineNumberEnd;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C name;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C USR;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C debugText;
                    internal byte isIncomplete;
                    internal byte isDependent;
                    internal byte isImplicit;
                    internal byte isInvalid;
                    internal byte isDeprecated;
                    internal __IntPtr completeDeclaration;
                    internal uint definitionOrder;
                    internal global::Std.Vector.__Internal PreprocessedEntities;
                    internal global::Std.Vector.__Internal Redeclarations;
                    internal __IntPtr originalPtr;
                    internal __IntPtr comment;
                    internal global::Std.Vector.__Internal Namespaces;
                    internal global::Std.Vector.__Internal Enums;
                    internal global::Std.Vector.__Internal Functions;
                    internal global::Std.Vector.__Internal Classes;
                    internal global::Std.Vector.__Internal Templates;
                    internal global::Std.Vector.__Internal Typedefs;
                    internal global::Std.Vector.__Internal TypeAliases;
                    internal global::Std.Vector.__Internal Variables;
                    internal global::Std.Vector.__Internal Friends;
                    internal global::Std.Map.__Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_ anonymous;
                    internal byte isAnonymous;
                    internal byte isInline;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C fileName;
                    internal byte isSystemHeader;
                    internal global::Std.Vector.__Internal Macros;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnitC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnitC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnitD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnit9getMacrosEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetMacros(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnit9addMacrosERPNS1_15MacroDefinitionE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddMacros(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnit11clearMacrosEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearMacros(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15TranslationUnit14getMacrosCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetMacrosCount(__IntPtr __instance);
                }

                internal static new TranslationUnit __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TranslationUnit(native.ToPointer(), skipVTables);
                }

                internal static new TranslationUnit __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TranslationUnit)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TranslationUnit __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TranslationUnit(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.TranslationUnit.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private TranslationUnit(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TranslationUnit(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TranslationUnit()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TranslationUnit.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TranslationUnit(global::CppSharp.Parser.AST.TranslationUnit _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TranslationUnit.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.MacroDefinition GetMacros(uint i)
                {
                    var ___ret = __Internal.GetMacros(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.MacroDefinition.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddMacros(global::CppSharp.Parser.AST.MacroDefinition s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddMacros(__Instance, __arg0);
                }

                public void ClearMacros()
                {
                    __Internal.ClearMacros(__Instance);
                }

                public string FileName
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->fileName));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->fileName), value);
                    }
                }

                public bool IsSystemHeader
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isSystemHeader != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isSystemHeader = (byte) (value ? 1 : 0);
                    }
                }

                public uint MacrosCount
                {
                    get
                    {
                        var ___ret = __Internal.GetMacrosCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class ASTContext : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public partial struct __Internal
                {
                    internal global::Std.Vector.__Internal TranslationUnits;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr FindOrCreateModule(__IntPtr __instance, __IntPtr File);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19getTranslationUnitsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetTranslationUnits(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19addTranslationUnitsERPNS1_15TranslationUnitE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddTranslationUnits(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext21clearTranslationUnitsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearTranslationUnits(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext24getTranslationUnitsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetTranslationUnitsCount(__IntPtr __instance);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.ASTContext> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.ASTContext>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.ASTContext managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.ASTContext managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static ASTContext __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ASTContext(native.ToPointer(), skipVTables);
                }

                internal static ASTContext __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ASTContext)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ASTContext __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ASTContext(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.ASTContext.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private ASTContext(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ASTContext(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public ASTContext()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ASTContext.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ASTContext(global::CppSharp.Parser.AST.ASTContext _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ASTContext.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.TranslationUnit FindOrCreateModule(string File)
                {
                    var __basicString0 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                    global::Std.BasicStringExtensions.Assign(__basicString0, File);
                    var __arg0 = __basicString0.__Instance;
                    var ___ret = __Internal.FindOrCreateModule(__Instance, __arg0);
                    __basicString0.Dispose(disposing: true, callNativeDtor:false);
                    var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public global::CppSharp.Parser.AST.TranslationUnit GetTranslationUnits(uint i)
                {
                    var ___ret = __Internal.GetTranslationUnits(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddTranslationUnits(global::CppSharp.Parser.AST.TranslationUnit s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddTranslationUnits(__Instance, __arg0);
                }

                public void ClearTranslationUnits()
                {
                    __Internal.ClearTranslationUnits(__Instance);
                }

                public uint TranslationUnitsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetTranslationUnitsCount(__Instance);
                        return ___ret;
                    }
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        namespace AST
        {
            public enum StmtClass
            {
                NoStmt = 0,
                GCCAsmStmt = 1,
                MSAsmStmt = 2,
                AttributedStmt = 3,
                BreakStmt = 4,
                CXXCatchStmt = 5,
                CXXForRangeStmt = 6,
                CXXTryStmt = 7,
                CapturedStmt = 8,
                CompoundStmt = 9,
                ContinueStmt = 10,
                CoreturnStmt = 11,
                CoroutineBodyStmt = 12,
                DeclStmt = 13,
                DoStmt = 14,
                BinaryConditionalOperator = 15,
                ConditionalOperator = 16,
                AddrLabelExpr = 17,
                ArrayInitIndexExpr = 18,
                ArrayInitLoopExpr = 19,
                ArraySubscriptExpr = 20,
                ArrayTypeTraitExpr = 21,
                AsTypeExpr = 22,
                AtomicExpr = 23,
                BinaryOperator = 24,
                CompoundAssignOperator = 25,
                BlockExpr = 26,
                CXXBindTemporaryExpr = 27,
                CXXBoolLiteralExpr = 28,
                CXXConstructExpr = 29,
                CXXTemporaryObjectExpr = 30,
                CXXDefaultArgExpr = 31,
                CXXDefaultInitExpr = 32,
                CXXDeleteExpr = 33,
                CXXDependentScopeMemberExpr = 34,
                CXXFoldExpr = 35,
                CXXInheritedCtorInitExpr = 36,
                CXXNewExpr = 37,
                CXXNoexceptExpr = 38,
                CXXNullPtrLiteralExpr = 39,
                CXXPseudoDestructorExpr = 40,
                CXXScalarValueInitExpr = 41,
                CXXStdInitializerListExpr = 42,
                CXXThisExpr = 43,
                CXXThrowExpr = 44,
                CXXTypeidExpr = 45,
                CXXUnresolvedConstructExpr = 46,
                CXXUuidofExpr = 47,
                CallExpr = 48,
                CUDAKernelCallExpr = 49,
                CXXMemberCallExpr = 50,
                CXXOperatorCallExpr = 51,
                UserDefinedLiteral = 52,
                CStyleCastExpr = 53,
                CXXFunctionalCastExpr = 54,
                CXXConstCastExpr = 55,
                CXXDynamicCastExpr = 56,
                CXXReinterpretCastExpr = 57,
                CXXStaticCastExpr = 58,
                ImplicitCastExpr = 60,
                CharacterLiteral = 61,
                ChooseExpr = 62,
                CompoundLiteralExpr = 63,
                ConvertVectorExpr = 64,
                CoawaitExpr = 65,
                CoyieldExpr = 66,
                DeclRefExpr = 67,
                DependentCoawaitExpr = 68,
                DependentScopeDeclRefExpr = 69,
                DesignatedInitExpr = 70,
                DesignatedInitUpdateExpr = 71,
                ExpressionTraitExpr = 72,
                ExtVectorElementExpr = 73,
                FixedPointLiteral = 74,
                FloatingLiteral = 75,
                ConstantExpr = 76,
                ExprWithCleanups = 77,
                FunctionParmPackExpr = 78,
                GNUNullExpr = 79,
                GenericSelectionExpr = 80,
                ImaginaryLiteral = 81,
                ImplicitValueInitExpr = 82,
                InitListExpr = 83,
                IntegerLiteral = 84,
                LambdaExpr = 85,
                MSPropertyRefExpr = 86,
                MSPropertySubscriptExpr = 87,
                MaterializeTemporaryExpr = 88,
                MemberExpr = 89,
                NoInitExpr = 90,
                OffsetOfExpr = 107,
                OpaqueValueExpr = 108,
                UnresolvedLookupExpr = 109,
                UnresolvedMemberExpr = 110,
                PackExpansionExpr = 111,
                ParenExpr = 112,
                ParenListExpr = 113,
                PredefinedExpr = 114,
                PseudoObjectExpr = 115,
                ShuffleVectorExpr = 116,
                SizeOfPackExpr = 117,
                StmtExpr = 118,
                StringLiteral = 119,
                SubstNonTypeTemplateParmExpr = 120,
                SubstNonTypeTemplateParmPackExpr = 121,
                TypeTraitExpr = 122,
                TypoExpr = 123,
                UnaryExprOrTypeTraitExpr = 124,
                UnaryOperator = 125,
                VAArgExpr = 126,
                ForStmt = 127,
                GotoStmt = 128,
                IfStmt = 129,
                IndirectGotoStmt = 130,
                LabelStmt = 131,
                MSDependentExistsStmt = 132,
                NullStmt = 133,
                ReturnStmt = 188,
                SEHExceptStmt = 189,
                SEHFinallyStmt = 190,
                SEHLeaveStmt = 191,
                SEHTryStmt = 192,
                CaseStmt = 193,
                DefaultStmt = 194,
                SwitchStmt = 195,
                WhileStmt = 196
            }

            public unsafe partial class Stmt : IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 20)]
                public partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4StmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4StmtC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4StmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public __IntPtr __Instance { get; protected set; }

                internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Stmt> NativeToManagedMap =
                    new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Stmt>();

                internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.Stmt managed)
                {
                    NativeToManagedMap[native] = managed;
                }

                internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.Stmt managed)
                {
    
                    return NativeToManagedMap.TryGetValue(native, out managed);
                }

                protected bool __ownsNativeInstance;

                internal static Stmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Stmt(native.ToPointer(), skipVTables);
                }

                internal static Stmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Stmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Stmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Stmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private Stmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Stmt(void* native, bool skipVTables = false)
                {
                    if (native == null)
                        return;
                    __Instance = new __IntPtr(native);
                }

                public Stmt()
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Stmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Stmt(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Stmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public Stmt(global::CppSharp.Parser.AST.Stmt _0)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Stmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.Stmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.Stmt.__Internal*) _0.__Instance);
                }

                public void Dispose()
                {
                    Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                }

                partial void DisposePartial(bool disposing);

                internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.Stmt(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.Stmt(klass);
                }

                public global::CppSharp.Parser.AST.StmtClass StmtClass
                {
                    get
                    {
                        return ((__Internal*)__Instance)->stmtClass;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->stmtClass = value;
                    }
                }

                public global::CppSharp.Parser.SourceRange SourceRange
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->sourceRange));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->sourceRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation BeginLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->beginLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->beginLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation EndLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->endLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->endLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class DeclStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal decls;
                    internal byte isSingleDecl;
                    internal __IntPtr singleDecl;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmt8getdeclsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getdecls(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmt8adddeclsERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Adddecls(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmt10cleardeclsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Cleardecls(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8DeclStmt13getdeclsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetdeclsCount(__IntPtr __instance);
                }

                internal static new DeclStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DeclStmt(native.ToPointer(), skipVTables);
                }

                internal static new DeclStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DeclStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DeclStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DeclStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.DeclStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private DeclStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DeclStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DeclStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DeclStmt(global::CppSharp.Parser.AST.DeclStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Declaration Getdecls(uint i)
                {
                    var ___ret = __Internal.Getdecls(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Adddecls(global::CppSharp.Parser.AST.Declaration s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Adddecls(__Instance, __arg0);
                }

                public void Cleardecls()
                {
                    __Internal.Cleardecls(__Instance);
                }

                public bool IsSingleDecl
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isSingleDecl != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isSingleDecl = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Declaration SingleDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->singleDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->singleDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint GetdeclsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetdeclsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class NullStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 28)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal semiLoc;
                    internal byte hasLeadingEmptyMacro;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8NullStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8NullStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new NullStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new NullStmt(native.ToPointer(), skipVTables);
                }

                internal static new NullStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (NullStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static NullStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new NullStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private NullStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected NullStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public NullStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NullStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public NullStmt(global::CppSharp.Parser.AST.NullStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NullStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.NullStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.NullStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation SemiLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->semiLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->semiLoc = value.__Instance;
                    }
                }

                public bool HasLeadingEmptyMacro
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasLeadingEmptyMacro != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasLeadingEmptyMacro = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CompoundStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal body;
                    internal byte body_empty;
                    internal uint size;
                    internal __IntPtr body_front;
                    internal __IntPtr body_back;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lBracLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rBracLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmt7getbodyEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getbody(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmt7addbodyERPNS1_4StmtE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addbody(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmt9clearbodyEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Clearbody(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CompoundStmt12getbodyCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetbodyCount(__IntPtr __instance);
                }

                internal static new CompoundStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CompoundStmt(native.ToPointer(), skipVTables);
                }

                internal static new CompoundStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CompoundStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CompoundStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CompoundStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CompoundStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CompoundStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CompoundStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CompoundStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CompoundStmt(global::CppSharp.Parser.AST.CompoundStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Stmt Getbody(uint i)
                {
                    var ___ret = __Internal.Getbody(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addbody(global::CppSharp.Parser.AST.Stmt s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addbody(__Instance, __arg0);
                }

                public void Clearbody()
                {
                    __Internal.Clearbody(__Instance);
                }

                public bool BodyEmpty
                {
                    get
                    {
                        return ((__Internal*)__Instance)->body_empty != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body_empty = (byte) (value ? 1 : 0);
                    }
                }

                public uint Size
                {
                    get
                    {
                        return ((__Internal*)__Instance)->size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->size = value;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt BodyFront
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body_front, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body_front = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt BodyBack
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body_back, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body_back = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LBracLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lBracLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lBracLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RBracLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rBracLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rBracLoc = value.__Instance;
                    }
                }

                public uint GetbodyCount
                {
                    get
                    {
                        var ___ret = __Internal.GetbodyCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class SwitchCase : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal __IntPtr subStmt;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SwitchCaseC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SwitchCaseC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SwitchCaseC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SwitchCase __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SwitchCase(native.ToPointer(), skipVTables);
                }

                internal static new SwitchCase __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SwitchCase)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SwitchCase __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SwitchCase(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SwitchCase(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SwitchCase(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SwitchCase()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SwitchCase.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SwitchCase(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SwitchCase.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public SwitchCase(global::CppSharp.Parser.AST.SwitchCase _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SwitchCase.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SwitchCase.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SwitchCase.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.SwitchCase(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.SwitchCase(klass);
                }

                public global::CppSharp.Parser.SourceLocation KeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->keywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->keywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ColonLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->colonLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->colonLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt SubStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->subStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CaseStmt : global::CppSharp.Parser.AST.SwitchCase, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 72)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal __IntPtr subStmt;
                    internal global::CppSharp.Parser.SourceLocation.__Internal caseLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal byte caseStmtIsGNURange;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CaseStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CaseStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CaseStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CaseStmt(native.ToPointer(), skipVTables);
                }

                internal static new CaseStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CaseStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CaseStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CaseStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CaseStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CaseStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CaseStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CaseStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CaseStmt(global::CppSharp.Parser.AST.CaseStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CaseStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CaseStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CaseStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation CaseLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->caseLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->caseLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation EllipsisLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ellipsisLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool CaseStmtIsGNURange
                {
                    get
                    {
                        return ((__Internal*)__Instance)->caseStmtIsGNURange != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->caseStmtIsGNURange = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class DefaultStmt : global::CppSharp.Parser.AST.SwitchCase, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal __IntPtr subStmt;
                    internal global::CppSharp.Parser.SourceLocation.__Internal defaultLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DefaultStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DefaultStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DefaultStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DefaultStmt(native.ToPointer(), skipVTables);
                }

                internal static new DefaultStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DefaultStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DefaultStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DefaultStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DefaultStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DefaultStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DefaultStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DefaultStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DefaultStmt(global::CppSharp.Parser.AST.DefaultStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DefaultStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DefaultStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DefaultStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation DefaultLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->defaultLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class LabelStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal identLoc;
                    internal __IntPtr subStmt;
                    internal __IntPtr name;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9LabelStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9LabelStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                private bool __name_OwnsNativeMemory = false;
                internal static new LabelStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new LabelStmt(native.ToPointer(), skipVTables);
                }

                internal static new LabelStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (LabelStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static LabelStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new LabelStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private LabelStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected LabelStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public LabelStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LabelStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public LabelStmt(global::CppSharp.Parser.AST.LabelStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LabelStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.LabelStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.LabelStmt.__Internal*) _0.__Instance);
                    if (_0.__name_OwnsNativeMemory)
                        this.Name = _0.Name;
                }

                public global::CppSharp.Parser.SourceLocation IdentLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->identLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->identLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt SubStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->subStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string Name
                {
                    get
                    {
                        return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ((__Internal*)__Instance)->name);
                    }

                    set
                    {
                        if (__name_OwnsNativeMemory)
                            Marshal.FreeHGlobal(((__Internal*)__Instance)->name);
                        __name_OwnsNativeMemory = true;
                        if (value == null)
                        {
                            ((__Internal*)__Instance)->name = global::System.IntPtr.Zero;
                            return;
                        }
                        var __bytes0 = global::System.Text.Encoding.UTF8.GetBytes(value);
                        var __bytePtr0 = Marshal.AllocHGlobal(__bytes0.Length + 1);
                        Marshal.Copy(__bytes0, 0, __bytePtr0, __bytes0.Length);
                        Marshal.WriteByte(__bytePtr0 + __bytes0.Length, 0);
                        ((__Internal*)__Instance)->name = (__IntPtr) __bytePtr0;
                    }
                }
            }

            public unsafe partial class AttributedStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal attrLoc;
                    internal __IntPtr subStmt;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14AttributedStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14AttributedStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new AttributedStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AttributedStmt(native.ToPointer(), skipVTables);
                }

                internal static new AttributedStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AttributedStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AttributedStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AttributedStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private AttributedStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AttributedStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AttributedStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AttributedStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AttributedStmt(global::CppSharp.Parser.AST.AttributedStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AttributedStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.AttributedStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.AttributedStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation AttrLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->attrLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->attrLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt SubStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->subStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class IfStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr cond;
                    internal __IntPtr then;
                    internal __IntPtr _else;
                    internal __IntPtr init;
                    internal global::CppSharp.Parser.SourceLocation.__Internal ifLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal elseLoc;
                    internal byte _constexpr;
                    internal byte hasInitStorage;
                    internal byte hasVarStorage;
                    internal byte hasElseStorage;
                    internal __IntPtr conditionVariableDeclStmt;
                    internal byte isObjCAvailabilityCheck;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6IfStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6IfStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new IfStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new IfStmt(native.ToPointer(), skipVTables);
                }

                internal static new IfStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (IfStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static IfStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new IfStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private IfStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected IfStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public IfStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IfStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public IfStmt(global::CppSharp.Parser.AST.IfStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IfStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.IfStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.IfStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Then
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->then, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->then = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Else
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->_else, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_else = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation IfLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ifLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ifLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ElseLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->elseLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->elseLoc = value.__Instance;
                    }
                }

                public bool Constexpr
                {
                    get
                    {
                        return ((__Internal*)__Instance)->_constexpr != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_constexpr = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasInitStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasInitStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasInitStorage = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasVarStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasVarStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasVarStorage = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasElseStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasElseStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasElseStorage = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt ConditionVariableDeclStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->conditionVariableDeclStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->conditionVariableDeclStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsObjCAvailabilityCheck
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isObjCAvailabilityCheck != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isObjCAvailabilityCheck = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class SwitchStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 72)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr cond;
                    internal __IntPtr body;
                    internal __IntPtr init;
                    internal global::CppSharp.Parser.SourceLocation.__Internal switchLoc;
                    internal byte hasInitStorage;
                    internal byte hasVarStorage;
                    internal __IntPtr conditionVariableDeclStmt;
                    internal byte isAllEnumCasesCovered;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SwitchStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SwitchStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SwitchStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SwitchStmt(native.ToPointer(), skipVTables);
                }

                internal static new SwitchStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SwitchStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SwitchStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SwitchStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SwitchStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SwitchStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SwitchStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SwitchStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SwitchStmt(global::CppSharp.Parser.AST.SwitchStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SwitchStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SwitchStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SwitchStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation SwitchLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->switchLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->switchLoc = value.__Instance;
                    }
                }

                public bool HasInitStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasInitStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasInitStorage = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasVarStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasVarStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasVarStorage = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt ConditionVariableDeclStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->conditionVariableDeclStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->conditionVariableDeclStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsAllEnumCasesCovered
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAllEnumCasesCovered != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAllEnumCasesCovered = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class WhileStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr cond;
                    internal __IntPtr body;
                    internal global::CppSharp.Parser.SourceLocation.__Internal whileLoc;
                    internal byte hasVarStorage;
                    internal __IntPtr conditionVariableDeclStmt;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9WhileStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9WhileStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new WhileStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new WhileStmt(native.ToPointer(), skipVTables);
                }

                internal static new WhileStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (WhileStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static WhileStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new WhileStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private WhileStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected WhileStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public WhileStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.WhileStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public WhileStmt(global::CppSharp.Parser.AST.WhileStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.WhileStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.WhileStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.WhileStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation WhileLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->whileLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->whileLoc = value.__Instance;
                    }
                }

                public bool HasVarStorage
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasVarStorage != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasVarStorage = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt ConditionVariableDeclStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->conditionVariableDeclStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->conditionVariableDeclStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class DoStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 56)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr cond;
                    internal __IntPtr body;
                    internal global::CppSharp.Parser.SourceLocation.__Internal doLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal whileLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6DoStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST6DoStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DoStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DoStmt(native.ToPointer(), skipVTables);
                }

                internal static new DoStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DoStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DoStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DoStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DoStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DoStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DoStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DoStmt(global::CppSharp.Parser.AST.DoStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DoStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DoStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation DoLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->doLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->doLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation WhileLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->whileLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->whileLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class ForStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr init;
                    internal __IntPtr cond;
                    internal __IntPtr inc;
                    internal __IntPtr body;
                    internal global::CppSharp.Parser.SourceLocation.__Internal forLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr conditionVariableDeclStmt;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7ForStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7ForStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ForStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ForStmt(native.ToPointer(), skipVTables);
                }

                internal static new ForStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ForStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ForStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ForStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ForStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ForStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ForStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ForStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ForStmt(global::CppSharp.Parser.AST.ForStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ForStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ForStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ForStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Stmt Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Inc
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->inc, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->inc = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ForLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->forLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->forLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt ConditionVariableDeclStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->conditionVariableDeclStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->conditionVariableDeclStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class GotoStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 28)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal gotoLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal labelLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8GotoStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8GotoStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new GotoStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new GotoStmt(native.ToPointer(), skipVTables);
                }

                internal static new GotoStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (GotoStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static GotoStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new GotoStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private GotoStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected GotoStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public GotoStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GotoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public GotoStmt(global::CppSharp.Parser.AST.GotoStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GotoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.GotoStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.GotoStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation GotoLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->gotoLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->gotoLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LabelLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->labelLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->labelLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class IndirectGotoStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal gotoLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal starLoc;
                    internal __IntPtr target;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16IndirectGotoStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16IndirectGotoStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new IndirectGotoStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new IndirectGotoStmt(native.ToPointer(), skipVTables);
                }

                internal static new IndirectGotoStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (IndirectGotoStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static IndirectGotoStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new IndirectGotoStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private IndirectGotoStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected IndirectGotoStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public IndirectGotoStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IndirectGotoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public IndirectGotoStmt(global::CppSharp.Parser.AST.IndirectGotoStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IndirectGotoStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.IndirectGotoStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.IndirectGotoStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation GotoLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->gotoLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->gotoLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation StarLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->starLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->starLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Target
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->target, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->target = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ContinueStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal continueLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12ContinueStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12ContinueStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ContinueStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ContinueStmt(native.ToPointer(), skipVTables);
                }

                internal static new ContinueStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ContinueStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ContinueStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ContinueStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ContinueStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ContinueStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ContinueStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ContinueStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ContinueStmt(global::CppSharp.Parser.AST.ContinueStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ContinueStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ContinueStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ContinueStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation ContinueLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->continueLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->continueLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class BreakStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal breakLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9BreakStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9BreakStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new BreakStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BreakStmt(native.ToPointer(), skipVTables);
                }

                internal static new BreakStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BreakStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BreakStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BreakStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private BreakStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BreakStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BreakStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BreakStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BreakStmt(global::CppSharp.Parser.AST.BreakStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BreakStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.BreakStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.BreakStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation BreakLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->breakLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->breakLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class ReturnStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr retValue;
                    internal global::CppSharp.Parser.SourceLocation.__Internal returnLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ReturnStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ReturnStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ReturnStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ReturnStmt(native.ToPointer(), skipVTables);
                }

                internal static new ReturnStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ReturnStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ReturnStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ReturnStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ReturnStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ReturnStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ReturnStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ReturnStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ReturnStmt(global::CppSharp.Parser.AST.ReturnStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ReturnStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ReturnStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ReturnStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr RetValue
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->retValue, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->retValue = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ReturnLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->returnLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->returnLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class AsmStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal inputs;
                    internal global::Std.Vector.__Internal outputs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal asmLoc;
                    internal byte simple;
                    internal byte _volatile;
                    internal uint numOutputs;
                    internal uint numPlusOperands;
                    internal uint numInputs;
                    internal uint numClobbers;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmtC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt9getinputsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getinputs(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt9addinputsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addinputs(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt11clearinputsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Clearinputs(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt10getoutputsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getoutputs(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt10addoutputsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addoutputs(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt12clearoutputsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Clearoutputs(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt14getinputsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetinputsCount(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST7AsmStmt15getoutputsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetoutputsCount(__IntPtr __instance);
                }

                internal static new AsmStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AsmStmt(native.ToPointer(), skipVTables);
                }

                internal static new AsmStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AsmStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AsmStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AsmStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.AsmStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private AsmStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AsmStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AsmStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AsmStmt(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public AsmStmt(global::CppSharp.Parser.AST.AsmStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr Getinputs(uint i)
                {
                    var ___ret = __Internal.Getinputs(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addinputs(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addinputs(__Instance, __arg0);
                }

                public void Clearinputs()
                {
                    __Internal.Clearinputs(__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Getoutputs(uint i)
                {
                    var ___ret = __Internal.Getoutputs(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addoutputs(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addoutputs(__Instance, __arg0);
                }

                public void Clearoutputs()
                {
                    __Internal.Clearoutputs(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.AsmStmt(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.AsmStmt(klass);
                }

                public global::CppSharp.Parser.SourceLocation AsmLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->asmLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->asmLoc = value.__Instance;
                    }
                }

                public bool Simple
                {
                    get
                    {
                        return ((__Internal*)__Instance)->simple != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->simple = (byte) (value ? 1 : 0);
                    }
                }

                public bool Volatile
                {
                    get
                    {
                        return ((__Internal*)__Instance)->_volatile != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_volatile = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumOutputs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numOutputs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numOutputs = value;
                    }
                }

                public uint NumPlusOperands
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numPlusOperands;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numPlusOperands = value;
                    }
                }

                public uint NumInputs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numInputs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numInputs = value;
                    }
                }

                public uint NumClobbers
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numClobbers;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numClobbers = value;
                    }
                }

                public uint GetinputsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetinputsCount(__Instance);
                        return ___ret;
                    }
                }

                public uint GetoutputsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetoutputsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class GCCAsmStmt : global::CppSharp.Parser.AST.AsmStmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal inputs;
                    internal global::Std.Vector.__Internal outputs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal asmLoc;
                    internal byte simple;
                    internal byte _volatile;
                    internal uint numOutputs;
                    internal uint numPlusOperands;
                    internal uint numInputs;
                    internal uint numClobbers;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public unsafe partial class AsmStringPiece : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 48)]
                    public partial struct __Internal
                    {
                        internal byte isString;
                        internal byte isOperand;
                        internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;
                        internal uint operandNo;
                        internal sbyte modifier;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmt14AsmStringPieceC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmt14AsmStringPieceC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10GCCAsmStmt14AsmStringPieceD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void dtor(__IntPtr __instance);
                    }

                    public enum Kind
                    {
                        String = 0,
                        Operand = 1
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static AsmStringPiece __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new AsmStringPiece(native.ToPointer(), skipVTables);
                    }

                    internal static AsmStringPiece __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (AsmStringPiece)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static AsmStringPiece __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new AsmStringPiece(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece.__Internal.cctor(ret, new __IntPtr(&native));
                        return ret.ToPointer();
                    }

                    private AsmStringPiece(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected AsmStringPiece(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public AsmStringPiece()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public AsmStringPiece(global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GCCAsmStmt.AsmStringPiece.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        if (ReferenceEquals(_0, null))
                            throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                        var __arg0 = _0.__Instance;
                        __Internal.cctor(__Instance, __arg0);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (callNativeDtor)
                            __Internal.dtor(__Instance);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public bool IsString
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isString != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isString = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsOperand
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isOperand != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isOperand = (byte) (value ? 1 : 0);
                        }
                    }

                    public string String
                    {
                        get
                        {
                            var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->@string));
                            return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                        }

                        set
                        {
                            global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->@string), value);
                        }
                    }

                    public uint OperandNo
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->operandNo;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->operandNo = value;
                        }
                    }

                    public sbyte Modifier
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->modifier;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->modifier = value;
                        }
                    }
                }

                internal static new GCCAsmStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new GCCAsmStmt(native.ToPointer(), skipVTables);
                }

                internal static new GCCAsmStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (GCCAsmStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static GCCAsmStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new GCCAsmStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.GCCAsmStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private GCCAsmStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected GCCAsmStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public GCCAsmStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GCCAsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public GCCAsmStmt(global::CppSharp.Parser.AST.GCCAsmStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GCCAsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class MSAsmStmt : global::CppSharp.Parser.AST.AsmStmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 144)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal inputs;
                    internal global::Std.Vector.__Internal outputs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal asmLoc;
                    internal byte simple;
                    internal byte _volatile;
                    internal uint numOutputs;
                    internal uint numPlusOperands;
                    internal uint numInputs;
                    internal uint numClobbers;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lBraceLoc;
                    internal byte hasBraces;
                    internal uint numAsmToks;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C asmString;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9MSAsmStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9MSAsmStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9MSAsmStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new MSAsmStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MSAsmStmt(native.ToPointer(), skipVTables);
                }

                internal static new MSAsmStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MSAsmStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MSAsmStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MSAsmStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.MSAsmStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private MSAsmStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MSAsmStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MSAsmStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSAsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MSAsmStmt(global::CppSharp.Parser.AST.MSAsmStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSAsmStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.SourceLocation LBraceLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lBraceLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lBraceLoc = value.__Instance;
                    }
                }

                public bool HasBraces
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasBraces != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasBraces = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumAsmToks
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numAsmToks;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numAsmToks = value;
                    }
                }

                public string AsmString
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->asmString));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->asmString), value);
                    }
                }
            }

            public unsafe partial class SEHExceptStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exceptLoc;
                    internal __IntPtr filterExpr;
                    internal __IntPtr block;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13SEHExceptStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13SEHExceptStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SEHExceptStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SEHExceptStmt(native.ToPointer(), skipVTables);
                }

                internal static new SEHExceptStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SEHExceptStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SEHExceptStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SEHExceptStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SEHExceptStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SEHExceptStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SEHExceptStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHExceptStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SEHExceptStmt(global::CppSharp.Parser.AST.SEHExceptStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHExceptStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SEHExceptStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SEHExceptStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation ExceptLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->exceptLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exceptLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr FilterExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->filterExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->filterExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt Block
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->block, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->block = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class SEHFinallyStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 32)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal finallyLoc;
                    internal __IntPtr block;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14SEHFinallyStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14SEHFinallyStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SEHFinallyStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SEHFinallyStmt(native.ToPointer(), skipVTables);
                }

                internal static new SEHFinallyStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SEHFinallyStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SEHFinallyStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SEHFinallyStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SEHFinallyStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SEHFinallyStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SEHFinallyStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHFinallyStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SEHFinallyStmt(global::CppSharp.Parser.AST.SEHFinallyStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHFinallyStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SEHFinallyStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SEHFinallyStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation FinallyLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->finallyLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->finallyLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt Block
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->block, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->block = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class SEHTryStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal tryLoc;
                    internal byte isCXXTry;
                    internal __IntPtr tryBlock;
                    internal __IntPtr handler;
                    internal __IntPtr exceptHandler;
                    internal __IntPtr finallyHandler;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SEHTryStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10SEHTryStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SEHTryStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SEHTryStmt(native.ToPointer(), skipVTables);
                }

                internal static new SEHTryStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SEHTryStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SEHTryStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SEHTryStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SEHTryStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SEHTryStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SEHTryStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHTryStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SEHTryStmt(global::CppSharp.Parser.AST.SEHTryStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHTryStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SEHTryStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SEHTryStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation TryLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->tryLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tryLoc = value.__Instance;
                    }
                }

                public bool IsCXXTry
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isCXXTry != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isCXXTry = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt TryBlock
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->tryBlock, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tryBlock = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Handler
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->handler, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->handler = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.SEHExceptStmt ExceptHandler
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.SEHExceptStmt.__GetOrCreateInstance(((__Internal*)__Instance)->exceptHandler, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exceptHandler = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.SEHFinallyStmt FinallyHandler
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.SEHFinallyStmt.__GetOrCreateInstance(((__Internal*)__Instance)->finallyHandler, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->finallyHandler = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class SEHLeaveStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 24)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal leaveLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12SEHLeaveStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12SEHLeaveStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SEHLeaveStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SEHLeaveStmt(native.ToPointer(), skipVTables);
                }

                internal static new SEHLeaveStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SEHLeaveStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SEHLeaveStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SEHLeaveStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SEHLeaveStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SEHLeaveStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SEHLeaveStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHLeaveStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SEHLeaveStmt(global::CppSharp.Parser.AST.SEHLeaveStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SEHLeaveStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SEHLeaveStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SEHLeaveStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation LeaveLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->leaveLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->leaveLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CapturedStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 64)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::Std.Vector.__Internal capture_inits;
                    internal __IntPtr capturedStmt;
                    internal uint capture_size;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmtD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt16getcapture_initsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetcaptureInits(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt16addcapture_initsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddcaptureInits(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt18clearcapture_initsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearcaptureInits(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt21getcapture_initsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetcaptureInitsCount(__IntPtr __instance);
                }

                public enum VariableCaptureKind
                {
                    This = 0,
                    ByRef = 1,
                    ByCopy = 2,
                    VLAType = 3
                }

                public unsafe partial class Capture : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 12)]
                    public partial struct __Internal
                    {
                        internal global::CppSharp.Parser.AST.CapturedStmt.VariableCaptureKind captureKind;
                        internal global::CppSharp.Parser.SourceLocation.__Internal location;
                        internal byte capturesThis;
                        internal byte capturesVariable;
                        internal byte capturesVariableByCopy;
                        internal byte capturesVariableArrayType;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt7CaptureC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CapturedStmt7CaptureC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.CapturedStmt.Capture> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.CapturedStmt.Capture>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.CapturedStmt.Capture managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.CapturedStmt.Capture managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Capture __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Capture(native.ToPointer(), skipVTables);
                    }

                    internal static Capture __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Capture)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Capture __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Capture(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private Capture(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Capture(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Capture()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CapturedStmt.Capture.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Capture(global::CppSharp.Parser.AST.CapturedStmt.Capture _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CapturedStmt.Capture.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.CapturedStmt.Capture.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CapturedStmt.Capture.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public global::CppSharp.Parser.AST.CapturedStmt.VariableCaptureKind CaptureKind
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->captureKind;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->captureKind = value;
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation Location
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->location = value.__Instance;
                        }
                    }

                    public bool CapturesThis
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->capturesThis != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->capturesThis = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool CapturesVariable
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->capturesVariable != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->capturesVariable = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool CapturesVariableByCopy
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->capturesVariableByCopy != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->capturesVariableByCopy = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool CapturesVariableArrayType
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->capturesVariableArrayType != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->capturesVariableArrayType = (byte) (value ? 1 : 0);
                        }
                    }
                }

                internal static new CapturedStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CapturedStmt(native.ToPointer(), skipVTables);
                }

                internal static new CapturedStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CapturedStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CapturedStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CapturedStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CapturedStmt.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CapturedStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CapturedStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CapturedStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CapturedStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CapturedStmt(global::CppSharp.Parser.AST.CapturedStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CapturedStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr GetcaptureInits(uint i)
                {
                    var ___ret = __Internal.GetcaptureInits(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddcaptureInits(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddcaptureInits(__Instance, __arg0);
                }

                public void ClearcaptureInits()
                {
                    __Internal.ClearcaptureInits(__Instance);
                }

                public global::CppSharp.Parser.AST.Stmt capturedStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->capturedStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->capturedStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint CaptureSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->capture_size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->capture_size = value;
                    }
                }

                public uint GetcaptureInitsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetcaptureInitsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXCatchStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal catchLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal caughtType;
                    internal __IntPtr handlerBlock;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CXXCatchStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CXXCatchStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXCatchStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXCatchStmt(native.ToPointer(), skipVTables);
                }

                internal static new CXXCatchStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXCatchStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXCatchStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXCatchStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXCatchStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXCatchStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXCatchStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXCatchStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXCatchStmt(global::CppSharp.Parser.AST.CXXCatchStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXCatchStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXCatchStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXCatchStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation CatchLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->catchLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->catchLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType CaughtType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->caughtType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->caughtType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt HandlerBlock
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->handlerBlock, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->handlerBlock = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXTryStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal tryLoc;
                    internal __IntPtr tryBlock;
                    internal uint numHandlers;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXTryStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXTryStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXTryStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXTryStmt(native.ToPointer(), skipVTables);
                }

                internal static new CXXTryStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXTryStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXTryStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXTryStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXTryStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXTryStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXTryStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTryStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXTryStmt(global::CppSharp.Parser.AST.CXXTryStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTryStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXTryStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXTryStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation TryLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->tryLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tryLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt TryBlock
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->tryBlock, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tryBlock = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint NumHandlers
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numHandlers;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numHandlers = value;
                    }
                }
            }

            public unsafe partial class CXXForRangeStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal __IntPtr init;
                    internal __IntPtr rangeInit;
                    internal __IntPtr cond;
                    internal __IntPtr inc;
                    internal __IntPtr body;
                    internal __IntPtr rangeStmt;
                    internal __IntPtr beginStmt;
                    internal __IntPtr endStmt;
                    internal __IntPtr loopVarStmt;
                    internal global::CppSharp.Parser.SourceLocation.__Internal forLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal coawaitLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15CXXForRangeStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15CXXForRangeStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXForRangeStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXForRangeStmt(native.ToPointer(), skipVTables);
                }

                internal static new CXXForRangeStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXForRangeStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXForRangeStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXForRangeStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXForRangeStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXForRangeStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXForRangeStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXForRangeStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXForRangeStmt(global::CppSharp.Parser.AST.CXXForRangeStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXForRangeStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXForRangeStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXForRangeStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Stmt Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RangeInit
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rangeInit, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rangeInit = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Inc
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->inc, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->inc = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt RangeStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->rangeStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rangeStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt BeginStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->beginStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->beginStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt EndStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->endStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->endStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.DeclStmt LoopVarStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.DeclStmt.__GetOrCreateInstance(((__Internal*)__Instance)->loopVarStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->loopVarStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ForLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->forLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->forLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation CoawaitLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->coawaitLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->coawaitLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ColonLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->colonLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->colonLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class MSDependentExistsStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 40)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal byte isIfExists;
                    internal byte isIfNotExists;
                    internal __IntPtr subStmt;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21MSDependentExistsStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21MSDependentExistsStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new MSDependentExistsStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MSDependentExistsStmt(native.ToPointer(), skipVTables);
                }

                internal static new MSDependentExistsStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MSDependentExistsStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MSDependentExistsStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MSDependentExistsStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private MSDependentExistsStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MSDependentExistsStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MSDependentExistsStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSDependentExistsStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MSDependentExistsStmt(global::CppSharp.Parser.AST.MSDependentExistsStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSDependentExistsStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.MSDependentExistsStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MSDependentExistsStmt.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation KeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->keywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->keywordLoc = value.__Instance;
                    }
                }

                public bool IsIfExists
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIfExists != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIfExists = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsIfNotExists
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIfNotExists != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIfNotExists = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt SubStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->subStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CoroutineBodyStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal byte hasDependentPromiseType;
                    internal __IntPtr body;
                    internal __IntPtr promiseDeclStmt;
                    internal __IntPtr initSuspendStmt;
                    internal __IntPtr finalSuspendStmt;
                    internal __IntPtr exceptionHandler;
                    internal __IntPtr fallthroughHandler;
                    internal __IntPtr allocate;
                    internal __IntPtr deallocate;
                    internal __IntPtr returnValueInit;
                    internal __IntPtr resultDecl;
                    internal __IntPtr returnStmt;
                    internal __IntPtr returnStmtOnAllocFailure;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CoroutineBodyStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CoroutineBodyStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum SubStmt
                {
                    Body = 0,
                    Promise = 1,
                    InitSuspend = 2,
                    FinalSuspend = 3,
                    OnException = 4,
                    OnFallthrough = 5,
                    Allocate = 6,
                    Deallocate = 7,
                    ReturnValue = 8,
                    ResultDecl = 9,
                    ReturnStmt = 10,
                    ReturnStmtOnAllocFailure = 11,
                    FirstParamMove = 12
                }

                public unsafe partial class CtorArgs : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 1)]
                    public partial struct __Internal
                    {
                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CoroutineBodyStmt8CtorArgsC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CoroutineBodyStmt8CtorArgsC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static CtorArgs __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new CtorArgs(native.ToPointer(), skipVTables);
                    }

                    internal static CtorArgs __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (CtorArgs)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static CtorArgs __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new CtorArgs(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private CtorArgs(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected CtorArgs(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public CtorArgs()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public CtorArgs(global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoroutineBodyStmt.CtorArgs.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }
                }

                internal static new CoroutineBodyStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CoroutineBodyStmt(native.ToPointer(), skipVTables);
                }

                internal static new CoroutineBodyStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CoroutineBodyStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CoroutineBodyStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CoroutineBodyStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CoroutineBodyStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CoroutineBodyStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CoroutineBodyStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineBodyStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CoroutineBodyStmt(global::CppSharp.Parser.AST.CoroutineBodyStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineBodyStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CoroutineBodyStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoroutineBodyStmt.__Internal*) _0.__Instance);
                }

                public bool HasDependentPromiseType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasDependentPromiseType != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasDependentPromiseType = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt PromiseDeclStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->promiseDeclStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->promiseDeclStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt InitSuspendStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->initSuspendStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->initSuspendStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt FinalSuspendStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->finalSuspendStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->finalSuspendStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt ExceptionHandler
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->exceptionHandler, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exceptionHandler = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt FallthroughHandler
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->fallthroughHandler, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->fallthroughHandler = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Allocate
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->allocate, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->allocate = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Deallocate
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->deallocate, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->deallocate = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ReturnValueInit
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->returnValueInit, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->returnValueInit = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt ResultDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->resultDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resultDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt ReturnStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->returnStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->returnStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt ReturnStmtOnAllocFailure
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->returnStmtOnAllocFailure, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->returnStmtOnAllocFailure = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CoreturnStmt : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 48)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal byte isImplicit;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal __IntPtr operand;
                    internal __IntPtr promiseCall;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CoreturnStmtC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CoreturnStmtC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum SubStmt
                {
                    Operand = 0,
                    PromiseCall = 1,
                    Count = 2
                }

                internal static new CoreturnStmt __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CoreturnStmt(native.ToPointer(), skipVTables);
                }

                internal static new CoreturnStmt __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CoreturnStmt)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CoreturnStmt __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CoreturnStmt(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CoreturnStmt(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CoreturnStmt(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CoreturnStmt()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoreturnStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CoreturnStmt(global::CppSharp.Parser.AST.CoreturnStmt _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoreturnStmt.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CoreturnStmt.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoreturnStmt.__Internal*) _0.__Instance);
                }

                public bool IsImplicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicit = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation KeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->keywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->keywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Operand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->operand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr PromiseCall
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->promiseCall, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->promiseCall = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        namespace AST
        {
            public enum CastKind
            {
                Dependent = 0,
                BitCast = 1,
                LValueBitCast = 2,
                LValueToRValue = 3,
                NoOp = 4,
                BaseToDerived = 5,
                DerivedToBase = 6,
                UncheckedDerivedToBase = 7,
                Dynamic = 8,
                ToUnion = 9,
                ArrayToPointerDecay = 10,
                FunctionToPointerDecay = 11,
                NullToPointer = 12,
                NullToMemberPointer = 13,
                BaseToDerivedMemberPointer = 14,
                DerivedToBaseMemberPointer = 15,
                MemberPointerToBoolean = 16,
                ReinterpretMemberPointer = 17,
                UserDefinedConversion = 18,
                ConstructorConversion = 19,
                IntegralToPointer = 20,
                PointerToIntegral = 21,
                PointerToBoolean = 22,
                ToVoid = 23,
                VectorSplat = 24,
                IntegralCast = 25,
                IntegralToBoolean = 26,
                IntegralToFloating = 27,
                FixedPointCast = 28,
                FixedPointToBoolean = 29,
                FloatingToIntegral = 30,
                FloatingToBoolean = 31,
                BooleanToSignedIntegral = 32,
                FloatingCast = 33,
                CPointerToObjCPointerCast = 34,
                BlockPointerToObjCPointerCast = 35,
                AnyPointerToBlockPointerCast = 36,
                ObjCObjectLValueCast = 37,
                FloatingRealToComplex = 38,
                FloatingComplexToReal = 39,
                FloatingComplexToBoolean = 40,
                FloatingComplexCast = 41,
                FloatingComplexToIntegralComplex = 42,
                IntegralRealToComplex = 43,
                IntegralComplexToReal = 44,
                IntegralComplexToBoolean = 45,
                IntegralComplexCast = 46,
                IntegralComplexToFloatingComplex = 47,
                ARCProduceObject = 48,
                ARCConsumeObject = 49,
                ARCReclaimReturnedObject = 50,
                ARCExtendBlockObject = 51,
                AtomicToNonAtomic = 52,
                NonAtomicToAtomic = 53,
                CopyAndAutoreleaseBlockObject = 54,
                BuiltinFnToFnPtr = 55,
                ZeroToOCLOpaqueType = 56,
                AddressSpaceConversion = 57,
                IntToOCLSampler = 58
            }

            public enum BinaryOperatorKind
            {
                PtrMemD = 0,
                PtrMemI = 1,
                Mul = 2,
                Div = 3,
                Rem = 4,
                Add = 5,
                Sub = 6,
                Shl = 7,
                Shr = 8,
                Cmp = 9,
                LT = 10,
                GT = 11,
                LE = 12,
                GE = 13,
                EQ = 14,
                NE = 15,
                And = 16,
                Xor = 17,
                Or = 18,
                LAnd = 19,
                LOr = 20,
                Assign = 21,
                MulAssign = 22,
                DivAssign = 23,
                RemAssign = 24,
                AddAssign = 25,
                SubAssign = 26,
                ShlAssign = 27,
                ShrAssign = 28,
                AndAssign = 29,
                XorAssign = 30,
                OrAssign = 31,
                Comma = 32
            }

            public enum UnaryOperatorKind
            {
                PostInc = 0,
                PostDec = 1,
                PreInc = 2,
                PreDec = 3,
                AddrOf = 4,
                Deref = 5,
                Plus = 6,
                Minus = 7,
                Not = 8,
                LNot = 9,
                Real = 10,
                Imag = 11,
                Extension = 12,
                Coawait = 13
            }

            public enum ObjCBridgeCastKind
            {
                Bridge = 0,
                BridgeTransfer = 1,
                BridgeRetained = 2
            }

            public enum OverloadedOperatorKind
            {
                None = 0,
                New = 1,
                Delete = 2,
                ArrayNew = 3,
                ArrayDelete = 4,
                Plus = 5,
                Minus = 6,
                Star = 7,
                Slash = 8,
                Percent = 9,
                Caret = 10,
                Amp = 11,
                Pipe = 12,
                Tilde = 13,
                Exclaim = 14,
                Equal = 15,
                Less = 16,
                Greater = 17,
                PlusEqual = 18,
                MinusEqual = 19,
                StarEqual = 20,
                SlashEqual = 21,
                PercentEqual = 22,
                CaretEqual = 23,
                AmpEqual = 24,
                PipeEqual = 25,
                LessLess = 26,
                GreaterGreater = 27,
                LessLessEqual = 28,
                GreaterGreaterEqual = 29,
                EqualEqual = 30,
                ExclaimEqual = 31,
                LessEqual = 32,
                GreaterEqual = 33,
                Spaceship = 34,
                AmpAmp = 35,
                PipePipe = 36,
                PlusPlus = 37,
                MinusMinus = 38,
                Comma = 39,
                ArrowStar = 40,
                Arrow = 41,
                Call = 42,
                Subscript = 43,
                Conditional = 44,
                Coawait = 45
            }

            public enum UnaryExprOrTypeTrait
            {
                SizeOf = 0,
                AlignOf = 1,
                VecStep = 2,
                OpenMPRequiredSimdAlign = 3,
                PreferredAlignOf = 4
            }

            public unsafe partial class Expr : global::CppSharp.Parser.AST.Stmt, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4ExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4ExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4ExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum LValueClassification
                {
                    Valid = 0,
                    NotObjectType = 1,
                    IncompleteVoidType = 2,
                    DuplicateVectorComponents = 3,
                    InvalidExpression = 4,
                    InvalidMessageExpression = 5,
                    MemberFunction = 6,
                    SubObjCPropertySetting = 7,
                    ClassTemporary = 8,
                    ArrayTemporary = 9
                }

                public enum IsModifiableLvalueResult
                {
                    Valid = 0,
                    NotObjectType = 1,
                    IncompleteVoidType = 2,
                    DuplicateVectorComponents = 3,
                    InvalidExpression = 4,
                    LValueCast = 5,
                    IncompleteType = 6,
                    ConstQualified = 7,
                    ConstQualifiedField = 8,
                    ConstAddrSpace = 9,
                    ArrayType = 10,
                    NoSetterProperty = 11,
                    MemberFunction = 12,
                    SubObjCPropertySetting = 13,
                    InvalidMessageExpression = 14,
                    ClassTemporary = 15,
                    ArrayTemporary = 16
                }

                public enum SideEffectsKind
                {
                    NoSideEffects = 0,
                    AllowUndefinedBehavior = 1,
                    AllowSideEffects = 2
                }

                public enum ConstExprUsage
                {
                    EvaluateForCodeGen = 0,
                    EvaluateForMangling = 1
                }

                public enum NullPointerConstantKind
                {
                    NotNull = 0,
                    ZeroExpression = 1,
                    ZeroLiteral = 2,
                    CXX11_nullptr = 3,
                    GNUNull = 4
                }

                public enum NullPointerConstantValueDependence
                {
                    NeverValueDependent = 0,
                    ValueDependentIsNull = 1,
                    ValueDependentIsNotNull = 2
                }

                public unsafe partial class Classification : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 16)]
                    public partial struct __Internal
                    {
                        internal global::CppSharp.Parser.AST.Expr.Classification.Kinds kind;
                        internal global::CppSharp.Parser.AST.Expr.Classification.ModifiableType modifiable;
                        internal byte isLValue;
                        internal byte isXValue;
                        internal byte isGLValue;
                        internal byte isPRValue;
                        internal byte isRValue;
                        internal byte isModifiable;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4Expr14ClassificationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST4Expr14ClassificationC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public enum Kinds
                    {
                        LValue = 0,
                        XValue = 1,
                        Function = 2,
                        Void = 3,
                        AddressableVoid = 4,
                        DuplicateVectorComponents = 5,
                        MemberFunction = 6,
                        SubObjCPropertySetting = 7,
                        ClassTemporary = 8,
                        ArrayTemporary = 9,
                        ObjCMessageRValue = 10,
                        PRValue = 11
                    }

                    public enum ModifiableType
                    {
                        Untested = 0,
                        Modifiable = 1,
                        RValue = 2,
                        Function = 3,
                        LValueCast = 4,
                        NoSetterProperty = 5,
                        ConstQualified = 6,
                        ConstQualifiedField = 7,
                        ConstAddrSpace = 8,
                        ArrayType = 9,
                        IncompleteType = 10
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Expr.Classification> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.Expr.Classification>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.Expr.Classification managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.Expr.Classification managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Classification __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Classification(native.ToPointer(), skipVTables);
                    }

                    internal static Classification __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Classification)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Classification __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Classification(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private Classification(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Classification(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Classification()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Expr.Classification.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Classification(global::CppSharp.Parser.AST.Expr.Classification _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Expr.Classification.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.Expr.Classification.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.Expr.Classification.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public global::CppSharp.Parser.AST.Expr.Classification.Kinds Kind
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->kind;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->kind = value;
                        }
                    }

                    public global::CppSharp.Parser.AST.Expr.Classification.ModifiableType Modifiable
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->modifiable;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->modifiable = value;
                        }
                    }

                    public bool IsLValue
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isLValue != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isLValue = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsXValue
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isXValue != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isXValue = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsGLValue
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isGLValue != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isGLValue = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsPRValue
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isPRValue != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isPRValue = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsRValue
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isRValue != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isRValue = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsModifiable
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isModifiable != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isModifiable = (byte) (value ? 1 : 0);
                        }
                    }
                }

                internal static new Expr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new Expr(native.ToPointer(), skipVTables);
                }

                internal static new Expr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (Expr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static Expr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new Expr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private Expr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected Expr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public Expr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Expr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public Expr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Expr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public Expr(global::CppSharp.Parser.AST.Expr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.Expr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.Expr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.Expr.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.Expr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.Expr(klass);
                }

                public global::CppSharp.Parser.AST.QualifiedType Type
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool ValueDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->valueDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->valueDependent = (byte) (value ? 1 : 0);
                    }
                }

                public bool TypeDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->typeDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->typeDependent = (byte) (value ? 1 : 0);
                    }
                }

                public bool InstantiationDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->instantiationDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->instantiationDependent = (byte) (value ? 1 : 0);
                    }
                }

                public bool ContainsUnexpandedParameterPack
                {
                    get
                    {
                        return ((__Internal*)__Instance)->containsUnexpandedParameterPack != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->containsUnexpandedParameterPack = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation ExprLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->exprLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exprLoc = value.__Instance;
                    }
                }

                public bool IsLValue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isLValue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isLValue = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsRValue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isRValue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isRValue = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsXValue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isXValue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isXValue = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsGLValue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isGLValue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isGLValue = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsOrdinaryOrBitFieldObject
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isOrdinaryOrBitFieldObject != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isOrdinaryOrBitFieldObject = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Field SourceBitField
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Field.__GetOrCreateInstance(((__Internal*)__Instance)->sourceBitField, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->sourceBitField = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration ReferencedDeclOfCallee
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->referencedDeclOfCallee, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->referencedDeclOfCallee = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool HasPlaceholderType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasPlaceholderType != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasPlaceholderType = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class FullExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FullExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FullExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8FullExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new FullExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FullExpr(native.ToPointer(), skipVTables);
                }

                internal static new FullExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FullExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FullExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FullExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private FullExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FullExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FullExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FullExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FullExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FullExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public FullExpr(global::CppSharp.Parser.AST.FullExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FullExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.FullExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.FullExpr.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.FullExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.FullExpr(klass);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ConstantExpr : global::CppSharp.Parser.AST.FullExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12ConstantExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12ConstantExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ConstantExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ConstantExpr(native.ToPointer(), skipVTables);
                }

                internal static new ConstantExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ConstantExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ConstantExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ConstantExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ConstantExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ConstantExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ConstantExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConstantExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ConstantExpr(global::CppSharp.Parser.AST.ConstantExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConstantExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ConstantExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ConstantExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class OpaqueValueExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte isUnique;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal __IntPtr sourceExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15OpaqueValueExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15OpaqueValueExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new OpaqueValueExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new OpaqueValueExpr(native.ToPointer(), skipVTables);
                }

                internal static new OpaqueValueExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (OpaqueValueExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static OpaqueValueExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new OpaqueValueExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private OpaqueValueExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected OpaqueValueExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public OpaqueValueExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OpaqueValueExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public OpaqueValueExpr(global::CppSharp.Parser.AST.OpaqueValueExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OpaqueValueExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.OpaqueValueExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.OpaqueValueExpr.__Internal*) _0.__Instance);
                }

                public bool IsUnique
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isUnique != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isUnique = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SourceExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->sourceExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->sourceExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class DeclRefExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal byte hadMultipleCandidates;
                    internal byte hasQualifier;
                    internal __IntPtr foundDecl;
                    internal byte hasTemplateKWAndArgsInfo;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;
                    internal byte refersToEnclosingVariableOrCapture;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DeclRefExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11DeclRefExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DeclRefExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DeclRefExpr(native.ToPointer(), skipVTables);
                }

                internal static new DeclRefExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DeclRefExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DeclRefExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DeclRefExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DeclRefExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DeclRefExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DeclRefExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DeclRefExpr(global::CppSharp.Parser.AST.DeclRefExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DeclRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DeclRefExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DeclRefExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public bool HadMultipleCandidates
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hadMultipleCandidates != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hadMultipleCandidates = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasQualifier
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasQualifier != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasQualifier = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Declaration FoundDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->foundDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->foundDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool HasTemplateKWAndArgsInfo
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKWAndArgsInfo != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKWAndArgsInfo = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation TemplateKeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->templateKeywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templateKeywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lAngleLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rAngleLoc = value.__Instance;
                    }
                }

                public bool HasTemplateKeyword
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKeyword != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKeyword = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitTemplateArgs != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitTemplateArgs = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numTemplateArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numTemplateArgs = value;
                    }
                }

                public bool RefersToEnclosingVariableOrCapture
                {
                    get
                    {
                        return ((__Internal*)__Instance)->refersToEnclosingVariableOrCapture != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->refersToEnclosingVariableOrCapture = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class IntegerLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal ulong value;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14IntegerLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14IntegerLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new IntegerLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new IntegerLiteral(native.ToPointer(), skipVTables);
                }

                internal static new IntegerLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (IntegerLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static IntegerLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new IntegerLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private IntegerLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected IntegerLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public IntegerLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IntegerLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public IntegerLiteral(global::CppSharp.Parser.AST.IntegerLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.IntegerLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.IntegerLiteral.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.IntegerLiteral.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public ulong Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = value;
                    }
                }
            }

            public unsafe partial class FixedPointLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal ulong value;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17FixedPointLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17FixedPointLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new FixedPointLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FixedPointLiteral(native.ToPointer(), skipVTables);
                }

                internal static new FixedPointLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FixedPointLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FixedPointLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FixedPointLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private FixedPointLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FixedPointLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FixedPointLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FixedPointLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FixedPointLiteral(global::CppSharp.Parser.AST.FixedPointLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FixedPointLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.FixedPointLiteral.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.FixedPointLiteral.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public ulong Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = value;
                    }
                }
            }

            public unsafe partial class CharacterLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal global::CppSharp.Parser.AST.CharacterLiteral.CharacterKind kind;
                    internal uint value;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CharacterLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CharacterLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum CharacterKind
                {
                    Ascii = 0,
                    Wide = 1,
                    UTF8 = 2,
                    UTF16 = 3,
                    UTF32 = 4
                }

                internal static new CharacterLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CharacterLiteral(native.ToPointer(), skipVTables);
                }

                internal static new CharacterLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CharacterLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CharacterLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CharacterLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CharacterLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CharacterLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CharacterLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CharacterLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CharacterLiteral(global::CppSharp.Parser.AST.CharacterLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CharacterLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CharacterLiteral.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CharacterLiteral.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CharacterLiteral.CharacterKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public uint Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = value;
                    }
                }
            }

            public unsafe partial class FloatingLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte exact;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal double valueAsApproximateDouble;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15FloatingLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15FloatingLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new FloatingLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FloatingLiteral(native.ToPointer(), skipVTables);
                }

                internal static new FloatingLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FloatingLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FloatingLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FloatingLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private FloatingLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FloatingLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FloatingLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FloatingLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FloatingLiteral(global::CppSharp.Parser.AST.FloatingLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FloatingLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.FloatingLiteral.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.FloatingLiteral.__Internal*) _0.__Instance);
                }

                public bool Exact
                {
                    get
                    {
                        return ((__Internal*)__Instance)->exact != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exact = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public double ValueAsApproximateDouble
                {
                    get
                    {
                        return ((__Internal*)__Instance)->valueAsApproximateDouble;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->valueAsApproximateDouble = value;
                    }
                }
            }

            public unsafe partial class ImaginaryLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ImaginaryLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ImaginaryLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ImaginaryLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ImaginaryLiteral(native.ToPointer(), skipVTables);
                }

                internal static new ImaginaryLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ImaginaryLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ImaginaryLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ImaginaryLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ImaginaryLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ImaginaryLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ImaginaryLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImaginaryLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ImaginaryLiteral(global::CppSharp.Parser.AST.ImaginaryLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImaginaryLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ImaginaryLiteral.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ImaginaryLiteral.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class StringLiteral : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 176)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C @string;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C bytes;
                    internal uint byteLength;
                    internal uint length;
                    internal uint charByteWidth;
                    internal global::CppSharp.Parser.AST.StringLiteral.StringKind kind;
                    internal byte isAscii;
                    internal byte isWide;
                    internal byte isUTF8;
                    internal byte isUTF16;
                    internal byte isUTF32;
                    internal byte isPascal;
                    internal byte containsNonAscii;
                    internal byte containsNonAsciiOrNull;
                    internal uint numConcatenated;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13StringLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13StringLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13StringLiteralD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public enum StringKind
                {
                    Ascii = 0,
                    Wide = 1,
                    UTF8 = 2,
                    UTF16 = 3,
                    UTF32 = 4
                }

                internal static new StringLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new StringLiteral(native.ToPointer(), skipVTables);
                }

                internal static new StringLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (StringLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static StringLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new StringLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.StringLiteral.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private StringLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected StringLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public StringLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StringLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public StringLiteral(global::CppSharp.Parser.AST.StringLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StringLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public string String
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->@string));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->@string), value);
                    }
                }

                public string Bytes
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->bytes));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->bytes), value);
                    }
                }

                public uint ByteLength
                {
                    get
                    {
                        return ((__Internal*)__Instance)->byteLength;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->byteLength = value;
                    }
                }

                public uint Length
                {
                    get
                    {
                        return ((__Internal*)__Instance)->length;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->length = value;
                    }
                }

                public uint CharByteWidth
                {
                    get
                    {
                        return ((__Internal*)__Instance)->charByteWidth;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->charByteWidth = value;
                    }
                }

                public global::CppSharp.Parser.AST.StringLiteral.StringKind Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public bool IsAscii
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAscii != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAscii = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsWide
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isWide != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isWide = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsUTF8
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isUTF8 != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isUTF8 = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsUTF16
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isUTF16 != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isUTF16 = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsUTF32
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isUTF32 != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isUTF32 = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPascal
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPascal != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPascal = (byte) (value ? 1 : 0);
                    }
                }

                public bool ContainsNonAscii
                {
                    get
                    {
                        return ((__Internal*)__Instance)->containsNonAscii != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->containsNonAscii = (byte) (value ? 1 : 0);
                    }
                }

                public bool ContainsNonAsciiOrNull
                {
                    get
                    {
                        return ((__Internal*)__Instance)->containsNonAsciiOrNull != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->containsNonAsciiOrNull = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumConcatenated
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numConcatenated;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numConcatenated = value;
                    }
                }
            }

            public unsafe partial class PredefinedExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal global::CppSharp.Parser.AST.PredefinedExpr.IdentKind identKind;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14PredefinedExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14PredefinedExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum IdentKind
                {
                    Func = 0,
                    Function = 1,
                    LFunction = 2,
                    FuncDName = 3,
                    FuncSig = 4,
                    LFuncSig = 5,
                    PrettyFunction = 6,
                    PrettyFunctionNoVirtual = 7
                }

                internal static new PredefinedExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PredefinedExpr(native.ToPointer(), skipVTables);
                }

                internal static new PredefinedExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PredefinedExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PredefinedExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PredefinedExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private PredefinedExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PredefinedExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public PredefinedExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PredefinedExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PredefinedExpr(global::CppSharp.Parser.AST.PredefinedExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PredefinedExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.PredefinedExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.PredefinedExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.PredefinedExpr.IdentKind identKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->identKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->identKind = value;
                    }
                }
            }

            public unsafe partial class ParenExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParen;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParen;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ParenExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9ParenExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ParenExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ParenExpr(native.ToPointer(), skipVTables);
                }

                internal static new ParenExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ParenExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ParenExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ParenExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ParenExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ParenExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ParenExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParenExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ParenExpr(global::CppSharp.Parser.AST.ParenExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParenExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ParenExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ParenExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LParen
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParen);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParen = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParen
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParen);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParen = value.__Instance;
                    }
                }
            }

            public unsafe partial class UnaryOperator : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.UnaryOperatorKind opcode;
                    internal __IntPtr subExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal byte canOverflow;
                    internal byte isPrefix;
                    internal byte isPostfix;
                    internal byte isIncrementOp;
                    internal byte isDecrementOp;
                    internal byte isIncrementDecrementOp;
                    internal byte isArithmeticOp;
                    internal byte isFPContractableWithinStatement;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13UnaryOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13UnaryOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnaryOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnaryOperator(native.ToPointer(), skipVTables);
                }

                internal static new UnaryOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnaryOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnaryOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnaryOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private UnaryOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnaryOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnaryOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnaryOperator(global::CppSharp.Parser.AST.UnaryOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.UnaryOperator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.UnaryOperator.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.UnaryOperatorKind Opcode
                {
                    get
                    {
                        return ((__Internal*)__Instance)->opcode;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->opcode = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public bool CanOverflow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->canOverflow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->canOverflow = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPrefix
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPrefix != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPrefix = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsPostfix
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPostfix != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPostfix = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsIncrementOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIncrementOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIncrementOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsDecrementOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isDecrementOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isDecrementOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsIncrementDecrementOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isIncrementDecrementOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isIncrementDecrementOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArithmeticOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArithmeticOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArithmeticOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsFPContractableWithinStatement
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isFPContractableWithinStatement != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isFPContractableWithinStatement = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class OffsetOfExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal uint numComponents;
                    internal uint numExpressions;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OffsetOfExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OffsetOfExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new OffsetOfExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new OffsetOfExpr(native.ToPointer(), skipVTables);
                }

                internal static new OffsetOfExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (OffsetOfExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static OffsetOfExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new OffsetOfExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private OffsetOfExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected OffsetOfExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public OffsetOfExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OffsetOfExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public OffsetOfExpr(global::CppSharp.Parser.AST.OffsetOfExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OffsetOfExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.OffsetOfExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.OffsetOfExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public uint NumComponents
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numComponents;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numComponents = value;
                    }
                }

                public uint NumExpressions
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numExpressions;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numExpressions = value;
                    }
                }
            }

            public unsafe partial class UnaryExprOrTypeTraitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.UnaryExprOrTypeTrait kind;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal byte isArgumentType;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal argumentType;
                    internal __IntPtr argumentExpr;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeOfArgument;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24UnaryExprOrTypeTraitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24UnaryExprOrTypeTraitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnaryExprOrTypeTraitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnaryExprOrTypeTraitExpr(native.ToPointer(), skipVTables);
                }

                internal static new UnaryExprOrTypeTraitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnaryExprOrTypeTraitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnaryExprOrTypeTraitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnaryExprOrTypeTraitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private UnaryExprOrTypeTraitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnaryExprOrTypeTraitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnaryExprOrTypeTraitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryExprOrTypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnaryExprOrTypeTraitExpr(global::CppSharp.Parser.AST.UnaryExprOrTypeTraitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnaryExprOrTypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.UnaryExprOrTypeTraitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.UnaryExprOrTypeTraitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.UnaryExprOrTypeTrait Kind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->kind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->kind = value;
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public bool IsArgumentType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArgumentType != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArgumentType = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType ArgumentType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->argumentType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->argumentType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ArgumentExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->argumentExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->argumentExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType TypeOfArgument
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->typeOfArgument));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->typeOfArgument = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class ArraySubscriptExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rBracketLoc;
                    internal __IntPtr @base;
                    internal __IntPtr idx;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArraySubscriptExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArraySubscriptExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ArraySubscriptExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ArraySubscriptExpr(native.ToPointer(), skipVTables);
                }

                internal static new ArraySubscriptExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ArraySubscriptExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ArraySubscriptExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ArraySubscriptExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ArraySubscriptExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ArraySubscriptExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ArraySubscriptExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArraySubscriptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ArraySubscriptExpr(global::CppSharp.Parser.AST.ArraySubscriptExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArraySubscriptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ArraySubscriptExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ArraySubscriptExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RBracketLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rBracketLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rBracketLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Idx
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->idx, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->idx = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CallExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 152)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal __IntPtr callee;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr calleeDecl;
                    internal __IntPtr directCallee;
                    internal uint numArgs;
                    internal uint numCommas;
                    internal uint builtinCallee;
                    internal byte isCallToStdMove;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExpr12getargumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getarguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExpr12addargumentsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addarguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExpr14clearargumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Cleararguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CallExpr17getargumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetargumentsCount(__IntPtr __instance);
                }

                internal static new CallExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CallExpr(native.ToPointer(), skipVTables);
                }

                internal static new CallExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CallExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CallExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CallExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CallExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CallExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CallExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CallExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CallExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public CallExpr(global::CppSharp.Parser.AST.CallExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr Getarguments(uint i)
                {
                    var ___ret = __Internal.Getarguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addarguments(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addarguments(__Instance, __arg0);
                }

                public void Cleararguments()
                {
                    __Internal.Cleararguments(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.CallExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.CallExpr(klass);
                }

                public global::CppSharp.Parser.AST.Expr Callee
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->callee, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->callee = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration CalleeDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->calleeDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->calleeDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Function DirectCallee
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->directCallee, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->directCallee = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint NumArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numArgs = value;
                    }
                }

                public uint NumCommas
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numCommas;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numCommas = value;
                    }
                }

                public uint BuiltinCallee
                {
                    get
                    {
                        return ((__Internal*)__Instance)->builtinCallee;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinCallee = value;
                    }
                }

                public bool IsCallToStdMove
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isCallToStdMove != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isCallToStdMove = (byte) (value ? 1 : 0);
                    }
                }

                public uint GetargumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetargumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class MemberExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr @base;
                    internal byte arrow;
                    internal global::CppSharp.Parser.SourceLocation.__Internal memberLoc;
                    internal byte hadMultipleCandidates;
                    internal byte hasQualifier;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal byte isImplicitAccess;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10MemberExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10MemberExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new MemberExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MemberExpr(native.ToPointer(), skipVTables);
                }

                internal static new MemberExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MemberExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MemberExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MemberExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private MemberExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MemberExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MemberExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MemberExpr(global::CppSharp.Parser.AST.MemberExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.MemberExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MemberExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool Arrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->arrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->arrow = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation MemberLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->memberLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->memberLoc = value.__Instance;
                    }
                }

                public bool HadMultipleCandidates
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hadMultipleCandidates != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hadMultipleCandidates = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasQualifier
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasQualifier != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasQualifier = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation TemplateKeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->templateKeywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templateKeywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lAngleLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rAngleLoc = value.__Instance;
                    }
                }

                public bool HasTemplateKeyword
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKeyword != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKeyword = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitTemplateArgs != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitTemplateArgs = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numTemplateArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numTemplateArgs = value;
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public bool IsImplicitAccess
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicitAccess != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicitAccess = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CompoundLiteralExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr initializer;
                    internal byte fileScope;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19CompoundLiteralExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19CompoundLiteralExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CompoundLiteralExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CompoundLiteralExpr(native.ToPointer(), skipVTables);
                }

                internal static new CompoundLiteralExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CompoundLiteralExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CompoundLiteralExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CompoundLiteralExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CompoundLiteralExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CompoundLiteralExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CompoundLiteralExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CompoundLiteralExpr(global::CppSharp.Parser.AST.CompoundLiteralExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CompoundLiteralExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CompoundLiteralExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Initializer
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->initializer, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->initializer = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool FileScope
                {
                    get
                    {
                        return ((__Internal*)__Instance)->fileScope != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->fileScope = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CastExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CastExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8CastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                private bool __castKindName_OwnsNativeMemory = false;
                internal static new CastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public CastExpr(global::CppSharp.Parser.AST.CastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CastExpr.__Internal*) _0.__Instance);
                    if (_0.__castKindName_OwnsNativeMemory)
                        this.CastKindName = _0.CastKindName;
                }

                public static implicit operator global::CppSharp.Parser.AST.CastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.CastExpr(klass);
                }

                public global::CppSharp.Parser.AST.CastKind CastKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->castKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->castKind = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string CastKindName
                {
                    get
                    {
                        return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ((__Internal*)__Instance)->castKindName);
                    }

                    set
                    {
                        if (__castKindName_OwnsNativeMemory)
                            Marshal.FreeHGlobal(((__Internal*)__Instance)->castKindName);
                        __castKindName_OwnsNativeMemory = true;
                        if (value == null)
                        {
                            ((__Internal*)__Instance)->castKindName = global::System.IntPtr.Zero;
                            return;
                        }
                        var __bytes0 = global::System.Text.Encoding.UTF8.GetBytes(value);
                        var __bytePtr0 = Marshal.AllocHGlobal(__bytes0.Length + 1);
                        Marshal.Copy(__bytes0, 0, __bytePtr0, __bytes0.Length);
                        Marshal.WriteByte(__bytePtr0 + __bytes0.Length, 0);
                        ((__Internal*)__Instance)->castKindName = (__IntPtr) __bytePtr0;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SubExprAsWritten
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExprAsWritten, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExprAsWritten = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration ConversionFunction
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->conversionFunction, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->conversionFunction = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool PathEmpty
                {
                    get
                    {
                        return ((__Internal*)__Instance)->path_empty != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->path_empty = (byte) (value ? 1 : 0);
                    }
                }

                public uint PathSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->path_size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->path_size = value;
                    }
                }
            }

            public unsafe partial class ImplicitCastExpr : global::CppSharp.Parser.AST.CastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal byte isPartOfExplicitCast;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ImplicitCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ImplicitCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum OnStack_t
                {
                    OnStack = 0
                }

                internal static new ImplicitCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ImplicitCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new ImplicitCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ImplicitCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ImplicitCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ImplicitCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ImplicitCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ImplicitCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ImplicitCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImplicitCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ImplicitCastExpr(global::CppSharp.Parser.AST.ImplicitCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImplicitCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ImplicitCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ImplicitCastExpr.__Internal*) _0.__Instance);
                }

                public bool IsPartOfExplicitCast
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPartOfExplicitCast != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPartOfExplicitCast = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class ExplicitCastExpr : global::CppSharp.Parser.AST.CastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ExplicitCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ExplicitCastExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ExplicitCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ExplicitCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ExplicitCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new ExplicitCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ExplicitCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ExplicitCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ExplicitCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ExplicitCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ExplicitCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ExplicitCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExplicitCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ExplicitCastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExplicitCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public ExplicitCastExpr(global::CppSharp.Parser.AST.ExplicitCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExplicitCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ExplicitCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ExplicitCastExpr.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.ExplicitCastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.ExplicitCastExpr(klass);
                }

                public global::CppSharp.Parser.AST.QualifiedType TypeAsWritten
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->typeAsWritten));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->typeAsWritten = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class CStyleCastExpr : global::CppSharp.Parser.AST.ExplicitCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 144)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14CStyleCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14CStyleCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CStyleCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CStyleCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CStyleCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CStyleCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CStyleCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CStyleCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CStyleCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CStyleCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CStyleCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CStyleCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CStyleCastExpr(global::CppSharp.Parser.AST.CStyleCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CStyleCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CStyleCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CStyleCastExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class BinaryOperator : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 152)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.AST.BinaryOperatorKind opcode;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C opcodeStr;
                    internal byte isPtrMemOp;
                    internal byte isMultiplicativeOp;
                    internal byte isAdditiveOp;
                    internal byte isShiftOp;
                    internal byte isBitwiseOp;
                    internal byte isRelationalOp;
                    internal byte isEqualityOp;
                    internal byte isComparisonOp;
                    internal byte isLogicalOp;
                    internal byte isAssignmentOp;
                    internal byte isCompoundAssignmentOp;
                    internal byte isShiftAssignOp;
                    internal byte isFPContractableWithinStatement;
                    internal byte isFEnvAccessOn;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14BinaryOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14BinaryOperatorC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14BinaryOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14BinaryOperatorD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new BinaryOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BinaryOperator(native.ToPointer(), skipVTables);
                }

                internal static new BinaryOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BinaryOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BinaryOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BinaryOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.BinaryOperator.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private BinaryOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BinaryOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BinaryOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BinaryOperator(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public BinaryOperator(global::CppSharp.Parser.AST.BinaryOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public static implicit operator global::CppSharp.Parser.AST.BinaryOperator(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.BinaryOperator(klass);
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.BinaryOperatorKind Opcode
                {
                    get
                    {
                        return ((__Internal*)__Instance)->opcode;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->opcode = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string OpcodeStr
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->opcodeStr));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->opcodeStr), value);
                    }
                }

                public bool IsPtrMemOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPtrMemOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPtrMemOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsMultiplicativeOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isMultiplicativeOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isMultiplicativeOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsAdditiveOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAdditiveOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAdditiveOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsShiftOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isShiftOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isShiftOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsBitwiseOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isBitwiseOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isBitwiseOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsRelationalOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isRelationalOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isRelationalOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsEqualityOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isEqualityOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isEqualityOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsComparisonOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isComparisonOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isComparisonOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsLogicalOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isLogicalOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isLogicalOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsAssignmentOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAssignmentOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAssignmentOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsCompoundAssignmentOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isCompoundAssignmentOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isCompoundAssignmentOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsShiftAssignOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isShiftAssignOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isShiftAssignOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsFPContractableWithinStatement
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isFPContractableWithinStatement != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isFPContractableWithinStatement = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsFEnvAccessOn
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isFEnvAccessOn != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isFEnvAccessOn = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CompoundAssignOperator : global::CppSharp.Parser.AST.BinaryOperator, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 184)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.AST.BinaryOperatorKind opcode;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C opcodeStr;
                    internal byte isPtrMemOp;
                    internal byte isMultiplicativeOp;
                    internal byte isAdditiveOp;
                    internal byte isShiftOp;
                    internal byte isBitwiseOp;
                    internal byte isRelationalOp;
                    internal byte isEqualityOp;
                    internal byte isComparisonOp;
                    internal byte isLogicalOp;
                    internal byte isAssignmentOp;
                    internal byte isCompoundAssignmentOp;
                    internal byte isShiftAssignOp;
                    internal byte isFPContractableWithinStatement;
                    internal byte isFEnvAccessOn;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal computationLHSType;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal computationResultType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CompoundAssignOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CompoundAssignOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CompoundAssignOperatorD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CompoundAssignOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CompoundAssignOperator(native.ToPointer(), skipVTables);
                }

                internal static new CompoundAssignOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CompoundAssignOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CompoundAssignOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CompoundAssignOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CompoundAssignOperator.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CompoundAssignOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CompoundAssignOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CompoundAssignOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundAssignOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CompoundAssignOperator(global::CppSharp.Parser.AST.CompoundAssignOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CompoundAssignOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.QualifiedType ComputationLHSType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->computationLHSType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->computationLHSType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType ComputationResultType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->computationResultType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->computationResultType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class AbstractConditionalOperator : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr cond;
                    internal __IntPtr trueExpr;
                    internal __IntPtr falseExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal questionLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27AbstractConditionalOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27AbstractConditionalOperatorC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27AbstractConditionalOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new AbstractConditionalOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AbstractConditionalOperator(native.ToPointer(), skipVTables);
                }

                internal static new AbstractConditionalOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AbstractConditionalOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AbstractConditionalOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AbstractConditionalOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private AbstractConditionalOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AbstractConditionalOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AbstractConditionalOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AbstractConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AbstractConditionalOperator(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AbstractConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public AbstractConditionalOperator(global::CppSharp.Parser.AST.AbstractConditionalOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AbstractConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.AbstractConditionalOperator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.AbstractConditionalOperator.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.AbstractConditionalOperator(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.AbstractConditionalOperator(klass);
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr TrueExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->trueExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->trueExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr FalseExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->falseExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->falseExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation QuestionLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->questionLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->questionLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ColonLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->colonLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->colonLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class ConditionalOperator : global::CppSharp.Parser.AST.AbstractConditionalOperator, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr cond;
                    internal __IntPtr trueExpr;
                    internal __IntPtr falseExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal questionLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ConditionalOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ConditionalOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ConditionalOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ConditionalOperator(native.ToPointer(), skipVTables);
                }

                internal static new ConditionalOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ConditionalOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ConditionalOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ConditionalOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ConditionalOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ConditionalOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ConditionalOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ConditionalOperator(global::CppSharp.Parser.AST.ConditionalOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ConditionalOperator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ConditionalOperator.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class BinaryConditionalOperator : global::CppSharp.Parser.AST.AbstractConditionalOperator, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr cond;
                    internal __IntPtr trueExpr;
                    internal __IntPtr falseExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal questionLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonLoc;
                    internal __IntPtr common;
                    internal __IntPtr opaqueValue;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25BinaryConditionalOperatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25BinaryConditionalOperatorC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new BinaryConditionalOperator __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BinaryConditionalOperator(native.ToPointer(), skipVTables);
                }

                internal static new BinaryConditionalOperator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BinaryConditionalOperator)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BinaryConditionalOperator __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BinaryConditionalOperator(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private BinaryConditionalOperator(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BinaryConditionalOperator(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BinaryConditionalOperator()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BinaryConditionalOperator(global::CppSharp.Parser.AST.BinaryConditionalOperator _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BinaryConditionalOperator.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.BinaryConditionalOperator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.BinaryConditionalOperator.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Common
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->common, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->common = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.OpaqueValueExpr OpaqueValue
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.OpaqueValueExpr.__GetOrCreateInstance(((__Internal*)__Instance)->opaqueValue, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->opaqueValue = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class AddrLabelExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal ampAmpLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal labelLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13AddrLabelExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13AddrLabelExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new AddrLabelExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AddrLabelExpr(native.ToPointer(), skipVTables);
                }

                internal static new AddrLabelExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AddrLabelExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AddrLabelExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AddrLabelExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private AddrLabelExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AddrLabelExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AddrLabelExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AddrLabelExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AddrLabelExpr(global::CppSharp.Parser.AST.AddrLabelExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AddrLabelExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.AddrLabelExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.AddrLabelExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation AmpAmpLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ampAmpLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ampAmpLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LabelLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->labelLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->labelLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class StmtExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subStmt;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8StmtExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8StmtExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new StmtExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new StmtExpr(native.ToPointer(), skipVTables);
                }

                internal static new StmtExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (StmtExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static StmtExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new StmtExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private StmtExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected StmtExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public StmtExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StmtExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public StmtExpr(global::CppSharp.Parser.AST.StmtExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.StmtExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.StmtExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.StmtExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.CompoundStmt SubStmt
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->subStmt, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subStmt = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class ShuffleVectorExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal uint numSubExprs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ShuffleVectorExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ShuffleVectorExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ShuffleVectorExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ShuffleVectorExpr(native.ToPointer(), skipVTables);
                }

                internal static new ShuffleVectorExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ShuffleVectorExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ShuffleVectorExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ShuffleVectorExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ShuffleVectorExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ShuffleVectorExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ShuffleVectorExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ShuffleVectorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ShuffleVectorExpr(global::CppSharp.Parser.AST.ShuffleVectorExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ShuffleVectorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ShuffleVectorExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ShuffleVectorExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public uint NumSubExprs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numSubExprs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numSubExprs = value;
                    }
                }
            }

            public unsafe partial class ConvertVectorExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr srcExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ConvertVectorExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ConvertVectorExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ConvertVectorExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ConvertVectorExpr(native.ToPointer(), skipVTables);
                }

                internal static new ConvertVectorExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ConvertVectorExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ConvertVectorExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ConvertVectorExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ConvertVectorExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ConvertVectorExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ConvertVectorExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConvertVectorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ConvertVectorExpr(global::CppSharp.Parser.AST.ConvertVectorExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ConvertVectorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ConvertVectorExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ConvertVectorExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SrcExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->srcExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->srcExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class ChooseExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte isConditionTrue;
                    internal __IntPtr cond;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal byte isConditionDependent;
                    internal __IntPtr chosenSubExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ChooseExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ChooseExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ChooseExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ChooseExpr(native.ToPointer(), skipVTables);
                }

                internal static new ChooseExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ChooseExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ChooseExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ChooseExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ChooseExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ChooseExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ChooseExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ChooseExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ChooseExpr(global::CppSharp.Parser.AST.ChooseExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ChooseExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ChooseExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ChooseExpr.__Internal*) _0.__Instance);
                }

                public bool IsConditionTrue
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConditionTrue != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConditionTrue = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr Cond
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cond, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cond = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public bool IsConditionDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isConditionDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isConditionDependent = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr ChosenSubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->chosenSubExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->chosenSubExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class GNUNullExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal tokenLocation;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11GNUNullExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11GNUNullExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new GNUNullExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new GNUNullExpr(native.ToPointer(), skipVTables);
                }

                internal static new GNUNullExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (GNUNullExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static GNUNullExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new GNUNullExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private GNUNullExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected GNUNullExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public GNUNullExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GNUNullExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public GNUNullExpr(global::CppSharp.Parser.AST.GNUNullExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GNUNullExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.GNUNullExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.GNUNullExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation TokenLocation
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->tokenLocation);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tokenLocation = value.__Instance;
                    }
                }
            }

            public unsafe partial class VAArgExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;
                    internal byte isMicrosoftABI;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9VAArgExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9VAArgExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new VAArgExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new VAArgExpr(native.ToPointer(), skipVTables);
                }

                internal static new VAArgExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (VAArgExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static VAArgExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new VAArgExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private VAArgExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected VAArgExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public VAArgExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VAArgExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public VAArgExpr(global::CppSharp.Parser.AST.VAArgExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.VAArgExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.VAArgExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.VAArgExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsMicrosoftABI
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isMicrosoftABI != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isMicrosoftABI = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class InitListExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr arrayFiller;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lBraceLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rBraceLoc;
                    internal __IntPtr syntacticForm;
                    internal uint numInits;
                    internal byte hasArrayFiller;
                    internal byte isExplicit;
                    internal byte isStringLiteralInit;
                    internal byte isTransparent;
                    internal byte isSemanticForm;
                    internal __IntPtr semanticForm;
                    internal byte isSyntacticForm;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12InitListExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12InitListExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new InitListExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new InitListExpr(native.ToPointer(), skipVTables);
                }

                internal static new InitListExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (InitListExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static InitListExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new InitListExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private InitListExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected InitListExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public InitListExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InitListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public InitListExpr(global::CppSharp.Parser.AST.InitListExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.InitListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.InitListExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.InitListExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr ArrayFiller
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->arrayFiller, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->arrayFiller = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LBraceLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lBraceLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lBraceLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RBraceLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rBraceLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rBraceLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.InitListExpr SyntacticForm
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.InitListExpr.__GetOrCreateInstance(((__Internal*)__Instance)->syntacticForm, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->syntacticForm = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint NumInits
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numInits;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numInits = value;
                    }
                }

                public bool HasArrayFiller
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasArrayFiller != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasArrayFiller = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsExplicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isExplicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isExplicit = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsStringLiteralInit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isStringLiteralInit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isStringLiteralInit = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsTransparent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isTransparent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isTransparent = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsSemanticForm
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isSemanticForm != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isSemanticForm = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.InitListExpr SemanticForm
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.InitListExpr.__GetOrCreateInstance(((__Internal*)__Instance)->semanticForm, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->semanticForm = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsSyntacticForm
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isSyntacticForm != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isSyntacticForm = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class DesignatedInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal equalOrColonLoc;
                    internal __IntPtr init;
                    internal uint size;
                    internal byte usesGNUSyntax;
                    internal uint numSubExprs;
                    internal global::CppSharp.Parser.SourceRange.__Internal designatorsSourceRange;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public unsafe partial class Designator : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 48)]
                    public partial struct __Internal
                    {
                        internal __IntPtr field;
                        internal byte isFieldDesignator;
                        internal byte isArrayDesignator;
                        internal byte isArrayRangeDesignator;
                        internal global::CppSharp.Parser.SourceLocation.__Internal dotLoc;
                        internal global::CppSharp.Parser.SourceLocation.__Internal fieldLoc;
                        internal global::CppSharp.Parser.SourceLocation.__Internal lBracketLoc;
                        internal global::CppSharp.Parser.SourceLocation.__Internal rBracketLoc;
                        internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
                        internal uint firstExprIndex;
                        internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr10DesignatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr10DesignatorC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.Designator> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.Designator>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.DesignatedInitExpr.Designator managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.DesignatedInitExpr.Designator managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static Designator __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new Designator(native.ToPointer(), skipVTables);
                    }

                    internal static Designator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (Designator)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static Designator __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new Designator(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private Designator(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected Designator(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public Designator()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.Designator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public Designator(global::CppSharp.Parser.AST.DesignatedInitExpr.Designator _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.Designator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.DesignatedInitExpr.Designator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DesignatedInitExpr.Designator.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }

                    public global::CppSharp.Parser.AST.Field Field
                    {
                        get
                        {
                            var __result0 = global::CppSharp.Parser.AST.Field.__GetOrCreateInstance(((__Internal*)__Instance)->field, false);
                            return __result0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->field = value is null ? __IntPtr.Zero : value.__Instance;
                        }
                    }

                    public bool IsFieldDesignator
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isFieldDesignator != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isFieldDesignator = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsArrayDesignator
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isArrayDesignator != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isArrayDesignator = (byte) (value ? 1 : 0);
                        }
                    }

                    public bool IsArrayRangeDesignator
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->isArrayRangeDesignator != 0;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->isArrayRangeDesignator = (byte) (value ? 1 : 0);
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation DotLoc
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->dotLoc);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->dotLoc = value.__Instance;
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation FieldLoc
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->fieldLoc);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->fieldLoc = value.__Instance;
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation LBracketLoc
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lBracketLoc);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->lBracketLoc = value.__Instance;
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation RBracketLoc
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rBracketLoc);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->rBracketLoc = value.__Instance;
                        }
                    }

                    public global::CppSharp.Parser.SourceLocation EllipsisLoc
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ellipsisLoc);
                        }

                        set
                        {
                            ((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
                        }
                    }

                    public uint FirstExprIndex
                    {
                        get
                        {
                            return ((__Internal*)__Instance)->firstExprIndex;
                        }

                        set
                        {
                            ((__Internal*)__Instance)->firstExprIndex = value;
                        }
                    }

                    public global::CppSharp.Parser.SourceRange SourceRange
                    {
                        get
                        {
                            return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->sourceRange));
                        }

                        set
                        {
                            if (ReferenceEquals(value, null))
                                throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                            ((__Internal*)__Instance)->sourceRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                        }
                    }
                }

                public unsafe partial class FieldDesignator : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 1)]
                    public partial struct __Internal
                    {
                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr15FieldDesignatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr15FieldDesignatorC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static FieldDesignator __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new FieldDesignator(native.ToPointer(), skipVTables);
                    }

                    internal static FieldDesignator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (FieldDesignator)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static FieldDesignator __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new FieldDesignator(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private FieldDesignator(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected FieldDesignator(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public FieldDesignator()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public FieldDesignator(global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DesignatedInitExpr.FieldDesignator.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }
                }

                public unsafe partial class ArrayOrRangeDesignator : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 1)]
                    public partial struct __Internal
                    {
                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr22ArrayOrRangeDesignatorC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18DesignatedInitExpr22ArrayOrRangeDesignatorC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static ArrayOrRangeDesignator __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new ArrayOrRangeDesignator(native.ToPointer(), skipVTables);
                    }

                    internal static ArrayOrRangeDesignator __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (ArrayOrRangeDesignator)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static ArrayOrRangeDesignator __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new ArrayOrRangeDesignator(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private ArrayOrRangeDesignator(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected ArrayOrRangeDesignator(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public ArrayOrRangeDesignator()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public ArrayOrRangeDesignator(global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DesignatedInitExpr.ArrayOrRangeDesignator.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }
                }

                internal static new DesignatedInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DesignatedInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new DesignatedInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DesignatedInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DesignatedInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DesignatedInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DesignatedInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DesignatedInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DesignatedInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DesignatedInitExpr(global::CppSharp.Parser.AST.DesignatedInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DesignatedInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DesignatedInitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation EqualOrColonLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->equalOrColonLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->equalOrColonLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint Size
                {
                    get
                    {
                        return ((__Internal*)__Instance)->size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->size = value;
                    }
                }

                public bool UsesGNUSyntax
                {
                    get
                    {
                        return ((__Internal*)__Instance)->usesGNUSyntax != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->usesGNUSyntax = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumSubExprs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numSubExprs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numSubExprs = value;
                    }
                }

                public global::CppSharp.Parser.SourceRange DesignatorsSourceRange
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->designatorsSourceRange));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->designatorsSourceRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class NoInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10NoInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10NoInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new NoInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new NoInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new NoInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (NoInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static NoInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new NoInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private NoInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected NoInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public NoInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NoInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public NoInitExpr(global::CppSharp.Parser.AST.NoInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.NoInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.NoInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.NoInitExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class DesignatedInitUpdateExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr @base;
                    internal __IntPtr updater;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24DesignatedInitUpdateExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24DesignatedInitUpdateExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DesignatedInitUpdateExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DesignatedInitUpdateExpr(native.ToPointer(), skipVTables);
                }

                internal static new DesignatedInitUpdateExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DesignatedInitUpdateExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DesignatedInitUpdateExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DesignatedInitUpdateExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DesignatedInitUpdateExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DesignatedInitUpdateExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DesignatedInitUpdateExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitUpdateExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DesignatedInitUpdateExpr(global::CppSharp.Parser.AST.DesignatedInitUpdateExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DesignatedInitUpdateExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DesignatedInitUpdateExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DesignatedInitUpdateExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.InitListExpr Updater
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.InitListExpr.__GetOrCreateInstance(((__Internal*)__Instance)->updater, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->updater = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ArrayInitLoopExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr commonExpr;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ArrayInitLoopExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17ArrayInitLoopExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ArrayInitLoopExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ArrayInitLoopExpr(native.ToPointer(), skipVTables);
                }

                internal static new ArrayInitLoopExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ArrayInitLoopExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ArrayInitLoopExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ArrayInitLoopExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ArrayInitLoopExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ArrayInitLoopExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ArrayInitLoopExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayInitLoopExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ArrayInitLoopExpr(global::CppSharp.Parser.AST.ArrayInitLoopExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayInitLoopExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ArrayInitLoopExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ArrayInitLoopExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.OpaqueValueExpr CommonExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.OpaqueValueExpr.__GetOrCreateInstance(((__Internal*)__Instance)->commonExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->commonExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ArrayInitIndexExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArrayInitIndexExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArrayInitIndexExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ArrayInitIndexExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ArrayInitIndexExpr(native.ToPointer(), skipVTables);
                }

                internal static new ArrayInitIndexExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ArrayInitIndexExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ArrayInitIndexExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ArrayInitIndexExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ArrayInitIndexExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ArrayInitIndexExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ArrayInitIndexExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayInitIndexExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ArrayInitIndexExpr(global::CppSharp.Parser.AST.ArrayInitIndexExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayInitIndexExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ArrayInitIndexExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ArrayInitIndexExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class ImplicitValueInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21ImplicitValueInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21ImplicitValueInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ImplicitValueInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ImplicitValueInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new ImplicitValueInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ImplicitValueInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ImplicitValueInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ImplicitValueInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ImplicitValueInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ImplicitValueInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ImplicitValueInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImplicitValueInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ImplicitValueInitExpr(global::CppSharp.Parser.AST.ImplicitValueInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ImplicitValueInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ImplicitValueInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ImplicitValueInitExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class ParenListExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal uint numExprs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ParenListExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13ParenListExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ParenListExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ParenListExpr(native.ToPointer(), skipVTables);
                }

                internal static new ParenListExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ParenListExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ParenListExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ParenListExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ParenListExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ParenListExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ParenListExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParenListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ParenListExpr(global::CppSharp.Parser.AST.ParenListExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ParenListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ParenListExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ParenListExpr.__Internal*) _0.__Instance);
                }

                public uint NumExprs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numExprs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numExprs = value;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class GenericSelectionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal uint numAssocs;
                    internal global::CppSharp.Parser.SourceLocation.__Internal genericLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal defaultLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr controllingExpr;
                    internal byte isResultDependent;
                    internal uint resultIndex;
                    internal __IntPtr resultExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20GenericSelectionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20GenericSelectionExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new GenericSelectionExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new GenericSelectionExpr(native.ToPointer(), skipVTables);
                }

                internal static new GenericSelectionExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (GenericSelectionExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static GenericSelectionExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new GenericSelectionExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private GenericSelectionExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected GenericSelectionExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public GenericSelectionExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GenericSelectionExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public GenericSelectionExpr(global::CppSharp.Parser.AST.GenericSelectionExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.GenericSelectionExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.GenericSelectionExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.GenericSelectionExpr.__Internal*) _0.__Instance);
                }

                public uint NumAssocs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numAssocs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numAssocs = value;
                    }
                }

                public global::CppSharp.Parser.SourceLocation GenericLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->genericLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->genericLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation DefaultLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->defaultLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->defaultLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ControllingExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->controllingExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->controllingExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsResultDependent
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isResultDependent != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isResultDependent = (byte) (value ? 1 : 0);
                    }
                }

                public uint ResultIndex
                {
                    get
                    {
                        return ((__Internal*)__Instance)->resultIndex;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resultIndex = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ResultExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->resultExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resultExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ExtVectorElementExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr @base;
                    internal global::CppSharp.Parser.SourceLocation.__Internal accessorLoc;
                    internal uint numElements;
                    internal byte containsDuplicateElements;
                    internal byte isArrow;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20ExtVectorElementExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20ExtVectorElementExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ExtVectorElementExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ExtVectorElementExpr(native.ToPointer(), skipVTables);
                }

                internal static new ExtVectorElementExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ExtVectorElementExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ExtVectorElementExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ExtVectorElementExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ExtVectorElementExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ExtVectorElementExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ExtVectorElementExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExtVectorElementExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ExtVectorElementExpr(global::CppSharp.Parser.AST.ExtVectorElementExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExtVectorElementExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ExtVectorElementExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ExtVectorElementExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation AccessorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->accessorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->accessorLoc = value.__Instance;
                    }
                }

                public uint NumElements
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numElements;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numElements = value;
                    }
                }

                public bool ContainsDuplicateElements
                {
                    get
                    {
                        return ((__Internal*)__Instance)->containsDuplicateElements != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->containsDuplicateElements = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrow = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class BlockExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal caretLocation;
                    internal __IntPtr body;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9BlockExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST9BlockExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new BlockExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new BlockExpr(native.ToPointer(), skipVTables);
                }

                internal static new BlockExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (BlockExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static BlockExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new BlockExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private BlockExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected BlockExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public BlockExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public BlockExpr(global::CppSharp.Parser.AST.BlockExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.BlockExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.BlockExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.BlockExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation CaretLocation
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->caretLocation);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->caretLocation = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Stmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class AsTypeExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr srcExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10AsTypeExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10AsTypeExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new AsTypeExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AsTypeExpr(native.ToPointer(), skipVTables);
                }

                internal static new AsTypeExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AsTypeExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AsTypeExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AsTypeExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private AsTypeExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AsTypeExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AsTypeExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AsTypeExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AsTypeExpr(global::CppSharp.Parser.AST.AsTypeExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AsTypeExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.AsTypeExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.AsTypeExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SrcExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->srcExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->srcExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class PseudoObjectExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr syntacticForm;
                    internal uint resultExprIndex;
                    internal __IntPtr resultExpr;
                    internal uint numSemanticExprs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16PseudoObjectExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16PseudoObjectExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new PseudoObjectExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PseudoObjectExpr(native.ToPointer(), skipVTables);
                }

                internal static new PseudoObjectExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PseudoObjectExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PseudoObjectExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PseudoObjectExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private PseudoObjectExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PseudoObjectExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public PseudoObjectExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PseudoObjectExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PseudoObjectExpr(global::CppSharp.Parser.AST.PseudoObjectExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PseudoObjectExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.PseudoObjectExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.PseudoObjectExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SyntacticForm
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->syntacticForm, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->syntacticForm = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint ResultExprIndex
                {
                    get
                    {
                        return ((__Internal*)__Instance)->resultExprIndex;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resultExprIndex = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ResultExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->resultExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resultExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint NumSemanticExprs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numSemanticExprs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numSemanticExprs = value;
                    }
                }
            }

            public unsafe partial class AtomicExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 176)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr ptr;
                    internal __IntPtr order;
                    internal __IntPtr scope;
                    internal __IntPtr val1;
                    internal __IntPtr orderFail;
                    internal __IntPtr val2;
                    internal __IntPtr weak;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal valueType;
                    internal global::CppSharp.Parser.AST.AtomicExpr.AtomicOp op;
                    internal uint numSubExprs;
                    internal byte isVolatile;
                    internal byte isCmpXChg;
                    internal byte isOpenCL;
                    internal global::CppSharp.Parser.SourceLocation.__Internal builtinLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10AtomicExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10AtomicExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum AtomicOp
                {
                    C11AtomicInit = 0,
                    C11AtomicLoad = 1,
                    C11AtomicStore = 2,
                    C11AtomicExchange = 3,
                    C11AtomicCompareExchangeStrong = 4,
                    C11AtomicCompareExchangeWeak = 5,
                    C11AtomicFetchAdd = 6,
                    C11AtomicFetchSub = 7,
                    C11AtomicFetchAnd = 8,
                    C11AtomicFetchOr = 9,
                    C11AtomicFetchXor = 10,
                    AtomicLoad = 11,
                    AtomicLoadN = 12,
                    AtomicStore = 13,
                    AtomicStoreN = 14,
                    AtomicExchange = 15,
                    AtomicExchangeN = 16,
                    AtomicCompareExchange = 17,
                    AtomicCompareExchangeN = 18,
                    AtomicFetchAdd = 19,
                    AtomicFetchSub = 20,
                    AtomicFetchAnd = 21,
                    AtomicFetchOr = 22,
                    AtomicFetchXor = 23,
                    AtomicFetchNand = 24,
                    AtomicAddFetch = 25,
                    AtomicSubFetch = 26,
                    AtomicAndFetch = 27,
                    AtomicOrFetch = 28,
                    AtomicXorFetch = 29,
                    AtomicNandFetch = 30,
                    OpenclAtomicInit = 31,
                    OpenclAtomicLoad = 32,
                    OpenclAtomicStore = 33,
                    OpenclAtomicExchange = 34,
                    OpenclAtomicCompareExchangeStrong = 35,
                    OpenclAtomicCompareExchangeWeak = 36,
                    OpenclAtomicFetchAdd = 37,
                    OpenclAtomicFetchSub = 38,
                    OpenclAtomicFetchAnd = 39,
                    OpenclAtomicFetchOr = 40,
                    OpenclAtomicFetchXor = 41,
                    OpenclAtomicFetchMin = 42,
                    OpenclAtomicFetchMax = 43,
                    AtomicFetchMin = 44,
                    AtomicFetchMax = 45
                }

                internal static new AtomicExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new AtomicExpr(native.ToPointer(), skipVTables);
                }

                internal static new AtomicExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (AtomicExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static AtomicExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new AtomicExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private AtomicExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected AtomicExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public AtomicExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AtomicExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public AtomicExpr(global::CppSharp.Parser.AST.AtomicExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.AtomicExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.AtomicExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.AtomicExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Ptr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->ptr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ptr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Order
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->order, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->order = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Scope
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->scope, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->scope = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Val1
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->val1, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->val1 = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr OrderFail
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->orderFail, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->orderFail = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Val2
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->val2, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->val2 = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Weak
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->weak, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->weak = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType ValueType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->valueType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->valueType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.AtomicExpr.AtomicOp Op
                {
                    get
                    {
                        return ((__Internal*)__Instance)->op;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->op = value;
                    }
                }

                public uint NumSubExprs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numSubExprs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numSubExprs = value;
                    }
                }

                public bool IsVolatile
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isVolatile != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isVolatile = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsCmpXChg
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isCmpXChg != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isCmpXChg = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsOpenCL
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isOpenCL != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isOpenCL = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation BuiltinLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->builtinLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->builtinLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class TypoExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TypoExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST8TypoExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new TypoExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypoExpr(native.ToPointer(), skipVTables);
                }

                internal static new TypoExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypoExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypoExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypoExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private TypoExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypoExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypoExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypoExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypoExpr(global::CppSharp.Parser.AST.TypoExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypoExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.TypoExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.TypoExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class CXXOperatorCallExpr : global::CppSharp.Parser.AST.CallExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 168)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal __IntPtr callee;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr calleeDecl;
                    internal __IntPtr directCallee;
                    internal uint numArgs;
                    internal uint numCommas;
                    internal uint builtinCallee;
                    internal byte isCallToStdMove;
                    internal global::CppSharp.Parser.AST.OverloadedOperatorKind _operator;
                    internal byte isAssignmentOp;
                    internal byte isInfixBinaryOp;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19CXXOperatorCallExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19CXXOperatorCallExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19CXXOperatorCallExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CXXOperatorCallExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXOperatorCallExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXOperatorCallExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXOperatorCallExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXOperatorCallExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXOperatorCallExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXOperatorCallExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXOperatorCallExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXOperatorCallExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXOperatorCallExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXOperatorCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXOperatorCallExpr(global::CppSharp.Parser.AST.CXXOperatorCallExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXOperatorCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.OverloadedOperatorKind Operator
                {
                    get
                    {
                        return ((__Internal*)__Instance)->_operator;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_operator = value;
                    }
                }

                public bool IsAssignmentOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAssignmentOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAssignmentOp = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsInfixBinaryOp
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isInfixBinaryOp != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isInfixBinaryOp = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXMemberCallExpr : global::CppSharp.Parser.AST.CallExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 168)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal __IntPtr callee;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr calleeDecl;
                    internal __IntPtr directCallee;
                    internal uint numArgs;
                    internal uint numCommas;
                    internal uint builtinCallee;
                    internal byte isCallToStdMove;
                    internal __IntPtr implicitObjectArgument;
                    internal __IntPtr methodDecl;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXMemberCallExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXMemberCallExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXMemberCallExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CXXMemberCallExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXMemberCallExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXMemberCallExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXMemberCallExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXMemberCallExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXMemberCallExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXMemberCallExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXMemberCallExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXMemberCallExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXMemberCallExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXMemberCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXMemberCallExpr(global::CppSharp.Parser.AST.CXXMemberCallExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXMemberCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr ImplicitObjectArgument
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->implicitObjectArgument, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->implicitObjectArgument = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Method MethodDecl
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Method.__GetOrCreateInstance(((__Internal*)__Instance)->methodDecl, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->methodDecl = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CUDAKernelCallExpr : global::CppSharp.Parser.AST.CallExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 160)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal __IntPtr callee;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr calleeDecl;
                    internal __IntPtr directCallee;
                    internal uint numArgs;
                    internal uint numCommas;
                    internal uint builtinCallee;
                    internal byte isCallToStdMove;
                    internal __IntPtr config;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CUDAKernelCallExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CUDAKernelCallExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CUDAKernelCallExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CUDAKernelCallExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CUDAKernelCallExpr(native.ToPointer(), skipVTables);
                }

                internal static new CUDAKernelCallExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CUDAKernelCallExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CUDAKernelCallExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CUDAKernelCallExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CUDAKernelCallExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CUDAKernelCallExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CUDAKernelCallExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CUDAKernelCallExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CUDAKernelCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CUDAKernelCallExpr(global::CppSharp.Parser.AST.CUDAKernelCallExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CUDAKernelCallExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.CallExpr Config
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CallExpr.__GetOrCreateInstance(((__Internal*)__Instance)->config, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->config = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXNamedCastExpr : global::CppSharp.Parser.AST.ExplicitCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 160)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal __IntPtr castName;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.SourceRange.__Internal angleBrackets;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXNamedCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXNamedCastExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXNamedCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                private bool __castName_OwnsNativeMemory = false;
                internal static new CXXNamedCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXNamedCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXNamedCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXNamedCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXNamedCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXNamedCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXNamedCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXNamedCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXNamedCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNamedCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXNamedCastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNamedCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public CXXNamedCastExpr(global::CppSharp.Parser.AST.CXXNamedCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNamedCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXNamedCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXNamedCastExpr.__Internal*) _0.__Instance);
                    if (_0.__castName_OwnsNativeMemory)
                        this.CastName = _0.CastName;
                }

                public static implicit operator global::CppSharp.Parser.AST.CXXNamedCastExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.CXXNamedCastExpr(klass);
                }

                public string CastName
                {
                    get
                    {
                        return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ((__Internal*)__Instance)->castName);
                    }

                    set
                    {
                        if (__castName_OwnsNativeMemory)
                            Marshal.FreeHGlobal(((__Internal*)__Instance)->castName);
                        __castName_OwnsNativeMemory = true;
                        if (value == null)
                        {
                            ((__Internal*)__Instance)->castName = global::System.IntPtr.Zero;
                            return;
                        }
                        var __bytes0 = global::System.Text.Encoding.UTF8.GetBytes(value);
                        var __bytePtr0 = Marshal.AllocHGlobal(__bytes0.Length + 1);
                        Marshal.Copy(__bytes0, 0, __bytePtr0, __bytes0.Length);
                        Marshal.WriteByte(__bytePtr0 + __bytes0.Length, 0);
                        ((__Internal*)__Instance)->castName = (__IntPtr) __bytePtr0;
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceRange AngleBrackets
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->angleBrackets));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->angleBrackets = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXStaticCastExpr : global::CppSharp.Parser.AST.CXXNamedCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 160)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal __IntPtr castName;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.SourceRange.__Internal angleBrackets;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXStaticCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXStaticCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXStaticCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXStaticCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXStaticCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXStaticCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXStaticCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXStaticCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXStaticCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXStaticCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXStaticCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXStaticCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXStaticCastExpr(global::CppSharp.Parser.AST.CXXStaticCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXStaticCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXStaticCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXStaticCastExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class CXXDynamicCastExpr : global::CppSharp.Parser.AST.CXXNamedCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 168)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal __IntPtr castName;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.SourceRange.__Internal angleBrackets;
                    internal byte isAlwaysNull;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXDynamicCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXDynamicCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXDynamicCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXDynamicCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXDynamicCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXDynamicCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXDynamicCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXDynamicCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXDynamicCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXDynamicCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXDynamicCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDynamicCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXDynamicCastExpr(global::CppSharp.Parser.AST.CXXDynamicCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDynamicCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXDynamicCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXDynamicCastExpr.__Internal*) _0.__Instance);
                }

                public bool IsAlwaysNull
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isAlwaysNull != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isAlwaysNull = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXReinterpretCastExpr : global::CppSharp.Parser.AST.CXXNamedCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 160)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal __IntPtr castName;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.SourceRange.__Internal angleBrackets;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXReinterpretCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXReinterpretCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXReinterpretCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXReinterpretCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXReinterpretCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXReinterpretCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXReinterpretCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXReinterpretCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXReinterpretCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXReinterpretCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXReinterpretCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXReinterpretCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXReinterpretCastExpr(global::CppSharp.Parser.AST.CXXReinterpretCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXReinterpretCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXReinterpretCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXReinterpretCastExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class CXXConstCastExpr : global::CppSharp.Parser.AST.CXXNamedCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 160)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal __IntPtr castName;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.SourceRange.__Internal angleBrackets;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXConstCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXConstCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXConstCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXConstCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXConstCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXConstCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXConstCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXConstCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXConstCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXConstCastExpr(global::CppSharp.Parser.AST.CXXConstCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXConstCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXConstCastExpr.__Internal*) _0.__Instance);
                }
            }

            public unsafe partial class UserDefinedLiteral : global::CppSharp.Parser.AST.CallExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 176)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal __IntPtr callee;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr calleeDecl;
                    internal __IntPtr directCallee;
                    internal uint numArgs;
                    internal uint numCommas;
                    internal uint builtinCallee;
                    internal byte isCallToStdMove;
                    internal global::CppSharp.Parser.AST.UserDefinedLiteral.LiteralOperatorKind literalOperatorKind;
                    internal __IntPtr cookedLiteral;
                    internal global::CppSharp.Parser.SourceLocation.__Internal uDSuffixLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18UserDefinedLiteralC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18UserDefinedLiteralC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18UserDefinedLiteralD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                public enum LiteralOperatorKind
                {
                    Raw = 0,
                    Template = 1,
                    Integer = 2,
                    Floating = 3,
                    String = 4,
                    Character = 5
                }

                internal static new UserDefinedLiteral __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UserDefinedLiteral(native.ToPointer(), skipVTables);
                }

                internal static new UserDefinedLiteral __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UserDefinedLiteral)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UserDefinedLiteral __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UserDefinedLiteral(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.UserDefinedLiteral.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private UserDefinedLiteral(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UserDefinedLiteral(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UserDefinedLiteral()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UserDefinedLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UserDefinedLiteral(global::CppSharp.Parser.AST.UserDefinedLiteral _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UserDefinedLiteral.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.UserDefinedLiteral.LiteralOperatorKind literalOperatorKind
                {
                    get
                    {
                        return ((__Internal*)__Instance)->literalOperatorKind;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->literalOperatorKind = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr CookedLiteral
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->cookedLiteral, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cookedLiteral = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation UDSuffixLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->uDSuffixLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->uDSuffixLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXBoolLiteralExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte value;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXBoolLiteralExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXBoolLiteralExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXBoolLiteralExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXBoolLiteralExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXBoolLiteralExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXBoolLiteralExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXBoolLiteralExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXBoolLiteralExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXBoolLiteralExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXBoolLiteralExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXBoolLiteralExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXBoolLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXBoolLiteralExpr(global::CppSharp.Parser.AST.CXXBoolLiteralExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXBoolLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXBoolLiteralExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXBoolLiteralExpr.__Internal*) _0.__Instance);
                }

                public bool Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXNullPtrLiteralExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21CXXNullPtrLiteralExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21CXXNullPtrLiteralExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXNullPtrLiteralExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXNullPtrLiteralExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXNullPtrLiteralExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXNullPtrLiteralExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXNullPtrLiteralExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXNullPtrLiteralExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXNullPtrLiteralExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXNullPtrLiteralExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXNullPtrLiteralExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNullPtrLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXNullPtrLiteralExpr(global::CppSharp.Parser.AST.CXXNullPtrLiteralExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNullPtrLiteralExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXNullPtrLiteralExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXNullPtrLiteralExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXStdInitializerListExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25CXXStdInitializerListExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25CXXStdInitializerListExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXStdInitializerListExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXStdInitializerListExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXStdInitializerListExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXStdInitializerListExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXStdInitializerListExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXStdInitializerListExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXStdInitializerListExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXStdInitializerListExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXStdInitializerListExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXStdInitializerListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXStdInitializerListExpr(global::CppSharp.Parser.AST.CXXStdInitializerListExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXStdInitializerListExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXStdInitializerListExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXStdInitializerListExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXTypeidExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr exprOperand;
                    internal byte isPotentiallyEvaluated;
                    internal byte isTypeOperand;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXTypeidExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXTypeidExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXTypeidExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXTypeidExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXTypeidExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXTypeidExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXTypeidExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXTypeidExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXTypeidExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXTypeidExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXTypeidExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTypeidExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXTypeidExpr(global::CppSharp.Parser.AST.CXXTypeidExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTypeidExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXTypeidExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXTypeidExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr ExprOperand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->exprOperand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exprOperand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsPotentiallyEvaluated
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPotentiallyEvaluated != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPotentiallyEvaluated = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsTypeOperand
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isTypeOperand != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isTypeOperand = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class MSPropertyRefExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte isImplicitAccess;
                    internal __IntPtr baseExpr;
                    internal byte isArrow;
                    internal global::CppSharp.Parser.SourceLocation.__Internal memberLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17MSPropertyRefExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17MSPropertyRefExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new MSPropertyRefExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MSPropertyRefExpr(native.ToPointer(), skipVTables);
                }

                internal static new MSPropertyRefExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MSPropertyRefExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MSPropertyRefExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MSPropertyRefExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private MSPropertyRefExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MSPropertyRefExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MSPropertyRefExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSPropertyRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MSPropertyRefExpr(global::CppSharp.Parser.AST.MSPropertyRefExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSPropertyRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.MSPropertyRefExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MSPropertyRefExpr.__Internal*) _0.__Instance);
                }

                public bool IsImplicitAccess
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicitAccess != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicitAccess = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr BaseExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->baseExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->baseExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsArrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrow = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation MemberLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->memberLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->memberLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class MSPropertySubscriptExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rBracketLoc;
                    internal __IntPtr @base;
                    internal __IntPtr idx;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23MSPropertySubscriptExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23MSPropertySubscriptExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new MSPropertySubscriptExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MSPropertySubscriptExpr(native.ToPointer(), skipVTables);
                }

                internal static new MSPropertySubscriptExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MSPropertySubscriptExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MSPropertySubscriptExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MSPropertySubscriptExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private MSPropertySubscriptExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MSPropertySubscriptExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MSPropertySubscriptExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSPropertySubscriptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MSPropertySubscriptExpr(global::CppSharp.Parser.AST.MSPropertySubscriptExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MSPropertySubscriptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.MSPropertySubscriptExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MSPropertySubscriptExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation RBracketLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rBracketLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rBracketLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Idx
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->idx, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->idx = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXUuidofExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr exprOperand;
                    internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C uuidStr;
                    internal byte isTypeOperand;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXUuidofExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXUuidofExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXUuidofExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CXXUuidofExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXUuidofExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXUuidofExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXUuidofExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXUuidofExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXUuidofExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXUuidofExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXUuidofExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXUuidofExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXUuidofExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXUuidofExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXUuidofExpr(global::CppSharp.Parser.AST.CXXUuidofExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXUuidofExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr ExprOperand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->exprOperand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->exprOperand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public string UuidStr
                {
                    get
                    {
                        var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->uuidStr));
                        return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    }

                    set
                    {
                        global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->uuidStr), value);
                    }
                }

                public bool IsTypeOperand
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isTypeOperand != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isTypeOperand = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXThisExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal byte @implicit;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXThisExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXThisExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXThisExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXThisExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXThisExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXThisExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXThisExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXThisExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXThisExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXThisExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXThisExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXThisExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXThisExpr(global::CppSharp.Parser.AST.CXXThisExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXThisExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXThisExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXThisExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public bool Implicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->@implicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@implicit = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXThrowExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal throwLoc;
                    internal byte isThrownVariableInScope;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CXXThrowExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12CXXThrowExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXThrowExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXThrowExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXThrowExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXThrowExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXThrowExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXThrowExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXThrowExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXThrowExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXThrowExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXThrowExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXThrowExpr(global::CppSharp.Parser.AST.CXXThrowExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXThrowExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXThrowExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXThrowExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ThrowLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->throwLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->throwLoc = value.__Instance;
                    }
                }

                public bool IsThrownVariableInScope
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isThrownVariableInScope != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isThrownVariableInScope = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXDefaultArgExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr expr;
                    internal global::CppSharp.Parser.SourceLocation.__Internal usedLocation;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXDefaultArgExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17CXXDefaultArgExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXDefaultArgExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXDefaultArgExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXDefaultArgExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXDefaultArgExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXDefaultArgExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXDefaultArgExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXDefaultArgExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXDefaultArgExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXDefaultArgExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDefaultArgExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXDefaultArgExpr(global::CppSharp.Parser.AST.CXXDefaultArgExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDefaultArgExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXDefaultArgExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXDefaultArgExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Expr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->expr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->expr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation UsedLocation
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->usedLocation);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->usedLocation = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXDefaultInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr field;
                    internal __IntPtr expr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXDefaultInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18CXXDefaultInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXDefaultInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXDefaultInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXDefaultInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXDefaultInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXDefaultInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXDefaultInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXDefaultInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXDefaultInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXDefaultInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDefaultInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXDefaultInitExpr(global::CppSharp.Parser.AST.CXXDefaultInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDefaultInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXDefaultInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXDefaultInitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Field Field
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Field.__GetOrCreateInstance(((__Internal*)__Instance)->field, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->field = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Expr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->expr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->expr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXBindTemporaryExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20CXXBindTemporaryExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20CXXBindTemporaryExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXBindTemporaryExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXBindTemporaryExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXBindTemporaryExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXBindTemporaryExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXBindTemporaryExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXBindTemporaryExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXBindTemporaryExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXBindTemporaryExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXBindTemporaryExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXBindTemporaryExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXBindTemporaryExpr(global::CppSharp.Parser.AST.CXXBindTemporaryExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXBindTemporaryExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXBindTemporaryExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXBindTemporaryExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr SubExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->subExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->subExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXConstructExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal byte elidable;
                    internal byte hadMultipleCandidates;
                    internal byte listInitialization;
                    internal byte stdInitListInitialization;
                    internal byte requiresZeroInitialization;
                    internal global::CppSharp.Parser.SourceRange.__Internal parenOrBraceRange;
                    internal uint numArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExpr12getargumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getarguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExpr12addargumentsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addarguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExpr14clearargumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Cleararguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16CXXConstructExpr17getargumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetargumentsCount(__IntPtr __instance);
                }

                public enum ConstructionKind
                {
                    Complete = 0,
                    NonVirtualBase = 1,
                    VirtualBase = 2,
                    Delegating = 3
                }

                internal static new CXXConstructExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXConstructExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXConstructExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXConstructExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXConstructExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXConstructExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXConstructExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXConstructExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXConstructExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXConstructExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstructExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXConstructExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstructExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public CXXConstructExpr(global::CppSharp.Parser.AST.CXXConstructExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXConstructExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr Getarguments(uint i)
                {
                    var ___ret = __Internal.Getarguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addarguments(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addarguments(__Instance, __arg0);
                }

                public void Cleararguments()
                {
                    __Internal.Cleararguments(__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.CXXConstructExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.CXXConstructExpr(klass);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public bool Elidable
                {
                    get
                    {
                        return ((__Internal*)__Instance)->elidable != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->elidable = (byte) (value ? 1 : 0);
                    }
                }

                public bool HadMultipleCandidates
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hadMultipleCandidates != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hadMultipleCandidates = (byte) (value ? 1 : 0);
                    }
                }

                public bool ListInitialization
                {
                    get
                    {
                        return ((__Internal*)__Instance)->listInitialization != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->listInitialization = (byte) (value ? 1 : 0);
                    }
                }

                public bool StdInitListInitialization
                {
                    get
                    {
                        return ((__Internal*)__Instance)->stdInitListInitialization != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->stdInitListInitialization = (byte) (value ? 1 : 0);
                    }
                }

                public bool RequiresZeroInitialization
                {
                    get
                    {
                        return ((__Internal*)__Instance)->requiresZeroInitialization != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->requiresZeroInitialization = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceRange ParenOrBraceRange
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->parenOrBraceRange));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->parenOrBraceRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }

                public uint NumArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numArgs = value;
                    }
                }

                public uint GetargumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetargumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXInheritedCtorInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte constructsVBase;
                    internal byte inheritedFromVBase;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXInheritedCtorInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24CXXInheritedCtorInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXInheritedCtorInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXInheritedCtorInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXInheritedCtorInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXInheritedCtorInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXInheritedCtorInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXInheritedCtorInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXInheritedCtorInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXInheritedCtorInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXInheritedCtorInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXInheritedCtorInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXInheritedCtorInitExpr(global::CppSharp.Parser.AST.CXXInheritedCtorInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXInheritedCtorInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXInheritedCtorInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXInheritedCtorInitExpr.__Internal*) _0.__Instance);
                }

                public bool ConstructsVBase
                {
                    get
                    {
                        return ((__Internal*)__Instance)->constructsVBase != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->constructsVBase = (byte) (value ? 1 : 0);
                    }
                }

                public bool InheritedFromVBase
                {
                    get
                    {
                        return ((__Internal*)__Instance)->inheritedFromVBase != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->inheritedFromVBase = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXFunctionalCastExpr : global::CppSharp.Parser.AST.ExplicitCastExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 152)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.CastKind castKind;
                    internal __IntPtr subExpr;
                    internal __IntPtr castKindName;
                    internal __IntPtr subExprAsWritten;
                    internal __IntPtr conversionFunction;
                    internal byte path_empty;
                    internal uint path_size;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal byte isListInitialization;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21CXXFunctionalCastExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST21CXXFunctionalCastExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXFunctionalCastExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXFunctionalCastExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXFunctionalCastExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXFunctionalCastExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXFunctionalCastExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXFunctionalCastExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXFunctionalCastExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXFunctionalCastExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXFunctionalCastExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXFunctionalCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXFunctionalCastExpr(global::CppSharp.Parser.AST.CXXFunctionalCastExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXFunctionalCastExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXFunctionalCastExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXFunctionalCastExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public bool IsListInitialization
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isListInitialization != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isListInitialization = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXTemporaryObjectExpr : global::CppSharp.Parser.AST.CXXConstructExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal byte elidable;
                    internal byte hadMultipleCandidates;
                    internal byte listInitialization;
                    internal byte stdInitListInitialization;
                    internal byte requiresZeroInitialization;
                    internal global::CppSharp.Parser.SourceRange.__Internal parenOrBraceRange;
                    internal uint numArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXTemporaryObjectExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXTemporaryObjectExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXTemporaryObjectExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);
                }

                internal static new CXXTemporaryObjectExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXTemporaryObjectExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXTemporaryObjectExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXTemporaryObjectExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXTemporaryObjectExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXTemporaryObjectExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXTemporaryObjectExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXTemporaryObjectExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXTemporaryObjectExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXTemporaryObjectExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTemporaryObjectExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXTemporaryObjectExpr(global::CppSharp.Parser.AST.CXXTemporaryObjectExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXTemporaryObjectExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }
            }

            public unsafe partial class LambdaExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 152)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal capture_inits;
                    internal global::CppSharp.Parser.SourceLocation.__Internal captureDefaultLoc;
                    internal uint capture_size;
                    internal global::CppSharp.Parser.SourceRange.__Internal introducerRange;
                    internal __IntPtr callOperator;
                    internal byte isGenericLambda;
                    internal __IntPtr body;
                    internal byte isMutable;
                    internal byte hasExplicitParameters;
                    internal byte hasExplicitResultType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExpr16getcapture_initsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetcaptureInits(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExpr16addcapture_initsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddcaptureInits(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExpr18clearcapture_initsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearcaptureInits(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10LambdaExpr21getcapture_initsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetcaptureInitsCount(__IntPtr __instance);
                }

                internal static new LambdaExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new LambdaExpr(native.ToPointer(), skipVTables);
                }

                internal static new LambdaExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (LambdaExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static LambdaExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new LambdaExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.LambdaExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private LambdaExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected LambdaExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public LambdaExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LambdaExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public LambdaExpr(global::CppSharp.Parser.AST.LambdaExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.LambdaExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr GetcaptureInits(uint i)
                {
                    var ___ret = __Internal.GetcaptureInits(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddcaptureInits(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddcaptureInits(__Instance, __arg0);
                }

                public void ClearcaptureInits()
                {
                    __Internal.ClearcaptureInits(__Instance);
                }

                public global::CppSharp.Parser.SourceLocation CaptureDefaultLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->captureDefaultLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->captureDefaultLoc = value.__Instance;
                    }
                }

                public uint CaptureSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->capture_size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->capture_size = value;
                    }
                }

                public global::CppSharp.Parser.SourceRange IntroducerRange
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->introducerRange));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->introducerRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Method CallOperator
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Method.__GetOrCreateInstance(((__Internal*)__Instance)->callOperator, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->callOperator = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsGenericLambda
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isGenericLambda != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isGenericLambda = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.CompoundStmt Body
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CompoundStmt.__GetOrCreateInstance(((__Internal*)__Instance)->body, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->body = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsMutable
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isMutable != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isMutable = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitParameters
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitParameters != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitParameters = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitResultType
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitResultType != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitResultType = (byte) (value ? 1 : 0);
                    }
                }

                public uint GetcaptureInitsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetcaptureInitsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXScalarValueInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXScalarValueInitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST22CXXScalarValueInitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXScalarValueInitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXScalarValueInitExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXScalarValueInitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXScalarValueInitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXScalarValueInitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXScalarValueInitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXScalarValueInitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXScalarValueInitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXScalarValueInitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXScalarValueInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXScalarValueInitExpr(global::CppSharp.Parser.AST.CXXScalarValueInitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXScalarValueInitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXScalarValueInitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXScalarValueInitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXNewExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 200)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal placement_arguments;
                    internal __IntPtr operatorNew;
                    internal __IntPtr operatorDelete;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal allocatedType;
                    internal byte isArray;
                    internal __IntPtr arraySize;
                    internal uint numPlacementArgs;
                    internal byte isParenTypeId;
                    internal global::CppSharp.Parser.SourceRange.__Internal typeIdParens;
                    internal byte isGlobalNew;
                    internal byte hasInitializer;
                    internal global::CppSharp.Parser.AST.CXXNewExpr.InitializationStyle initializationStyle;
                    internal __IntPtr initializer;
                    internal __IntPtr constructExpr;
                    internal global::CppSharp.Parser.SourceRange.__Internal directInitRange;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExpr22getplacement_argumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr GetplacementArguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExpr22addplacement_argumentsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void AddplacementArguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExpr24clearplacement_argumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ClearplacementArguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10CXXNewExpr27getplacement_argumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetplacementArgumentsCount(__IntPtr __instance);
                }

                public enum InitializationStyle
                {
                    NoInit = 0,
                    CallInit = 1,
                    ListInit = 2
                }

                internal static new CXXNewExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXNewExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXNewExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXNewExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXNewExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXNewExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXNewExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXNewExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXNewExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXNewExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNewExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXNewExpr(global::CppSharp.Parser.AST.CXXNewExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNewExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr GetplacementArguments(uint i)
                {
                    var ___ret = __Internal.GetplacementArguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void AddplacementArguments(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.AddplacementArguments(__Instance, __arg0);
                }

                public void ClearplacementArguments()
                {
                    __Internal.ClearplacementArguments(__Instance);
                }

                public global::CppSharp.Parser.AST.Function OperatorNew
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->operatorNew, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorNew = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Function OperatorDelete
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->operatorDelete, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorDelete = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType AllocatedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->allocatedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->allocatedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool IsArray
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArray != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArray = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr ArraySize
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->arraySize, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->arraySize = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint NumPlacementArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numPlacementArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numPlacementArgs = value;
                    }
                }

                public bool IsParenTypeId
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isParenTypeId != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isParenTypeId = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceRange TypeIdParens
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->typeIdParens));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->typeIdParens = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }

                public bool IsGlobalNew
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isGlobalNew != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isGlobalNew = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasInitializer
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasInitializer != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasInitializer = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.CXXNewExpr.InitializationStyle initializationStyle
                {
                    get
                    {
                        return ((__Internal*)__Instance)->initializationStyle;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->initializationStyle = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Initializer
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->initializer, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->initializer = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.CXXConstructExpr ConstructExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.CXXConstructExpr.__GetOrCreateInstance(((__Internal*)__Instance)->constructExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->constructExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceRange DirectInitRange
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceRange.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->directInitRange));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->directInitRange = *(global::CppSharp.Parser.SourceRange.__Internal*) value.__Instance;
                    }
                }

                public uint GetplacementArgumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetplacementArgumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXDeleteExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte isGlobalDelete;
                    internal byte isArrayForm;
                    internal byte isArrayFormAsWritten;
                    internal __IntPtr operatorDelete;
                    internal __IntPtr argument;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal destroyedType;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXDeleteExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13CXXDeleteExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXDeleteExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXDeleteExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXDeleteExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXDeleteExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXDeleteExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXDeleteExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXDeleteExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXDeleteExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXDeleteExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDeleteExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXDeleteExpr(global::CppSharp.Parser.AST.CXXDeleteExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDeleteExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXDeleteExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXDeleteExpr.__Internal*) _0.__Instance);
                }

                public bool IsGlobalDelete
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isGlobalDelete != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isGlobalDelete = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArrayForm
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrayForm != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrayForm = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArrayFormAsWritten
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrayFormAsWritten != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrayFormAsWritten = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Function OperatorDelete
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Function.__GetOrCreateInstance(((__Internal*)__Instance)->operatorDelete, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorDelete = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Argument
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->argument, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->argument = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType DestroyedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->destroyedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->destroyedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXPseudoDestructorExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr @base;
                    internal byte hasQualifier;
                    internal byte isArrow;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal colonColonLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal tildeLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal destroyedType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal destroyedTypeLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23CXXPseudoDestructorExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST23CXXPseudoDestructorExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXPseudoDestructorExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXPseudoDestructorExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXPseudoDestructorExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXPseudoDestructorExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXPseudoDestructorExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXPseudoDestructorExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXPseudoDestructorExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXPseudoDestructorExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXPseudoDestructorExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXPseudoDestructorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXPseudoDestructorExpr(global::CppSharp.Parser.AST.CXXPseudoDestructorExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXPseudoDestructorExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXPseudoDestructorExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXPseudoDestructorExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool HasQualifier
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasQualifier != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasQualifier = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrow = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation ColonColonLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->colonColonLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->colonColonLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation TildeLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->tildeLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->tildeLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType DestroyedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->destroyedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->destroyedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation DestroyedTypeLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->destroyedTypeLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->destroyedTypeLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class TypeTraitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 80)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte value;
                    internal uint numArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13TypeTraitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST13TypeTraitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new TypeTraitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new TypeTraitExpr(native.ToPointer(), skipVTables);
                }

                internal static new TypeTraitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (TypeTraitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static TypeTraitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new TypeTraitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private TypeTraitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected TypeTraitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public TypeTraitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public TypeTraitExpr(global::CppSharp.Parser.AST.TypeTraitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.TypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.TypeTraitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.TypeTraitExpr.__Internal*) _0.__Instance);
                }

                public bool Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numArgs = value;
                    }
                }
            }

            public unsafe partial class ArrayTypeTraitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal queriedType;
                    internal ulong value;
                    internal __IntPtr dimensionExpression;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArrayTypeTraitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST18ArrayTypeTraitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ArrayTypeTraitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ArrayTypeTraitExpr(native.ToPointer(), skipVTables);
                }

                internal static new ArrayTypeTraitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ArrayTypeTraitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ArrayTypeTraitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ArrayTypeTraitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ArrayTypeTraitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ArrayTypeTraitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ArrayTypeTraitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayTypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ArrayTypeTraitExpr(global::CppSharp.Parser.AST.ArrayTypeTraitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ArrayTypeTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ArrayTypeTraitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ArrayTypeTraitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.QualifiedType QueriedType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->queriedType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->queriedType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public ulong Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = value;
                    }
                }

                public global::CppSharp.Parser.AST.Expr DimensionExpression
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->dimensionExpression, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->dimensionExpression = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class ExpressionTraitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr queriedExpression;
                    internal byte value;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ExpressionTraitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST19ExpressionTraitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ExpressionTraitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ExpressionTraitExpr(native.ToPointer(), skipVTables);
                }

                internal static new ExpressionTraitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ExpressionTraitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ExpressionTraitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ExpressionTraitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ExpressionTraitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ExpressionTraitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ExpressionTraitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExpressionTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ExpressionTraitExpr(global::CppSharp.Parser.AST.ExpressionTraitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExpressionTraitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ExpressionTraitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ExpressionTraitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr QueriedExpression
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->queriedExpression, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->queriedExpression = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class OverloadExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal uint numDecls;
                    internal global::CppSharp.Parser.SourceLocation.__Internal nameLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OverloadExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OverloadExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OverloadExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public unsafe partial class FindResult : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 1)]
                    public partial struct __Internal
                    {
                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OverloadExpr10FindResultC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST12OverloadExpr10FindResultC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.OverloadExpr.FindResult> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.OverloadExpr.FindResult>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.OverloadExpr.FindResult managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.OverloadExpr.FindResult managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static FindResult __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new FindResult(native.ToPointer(), skipVTables);
                    }

                    internal static FindResult __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (FindResult)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static FindResult __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new FindResult(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private FindResult(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected FindResult(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public FindResult()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OverloadExpr.FindResult.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public FindResult(global::CppSharp.Parser.AST.OverloadExpr.FindResult _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OverloadExpr.FindResult.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.OverloadExpr.FindResult.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.OverloadExpr.FindResult.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }
                }

                internal static new OverloadExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new OverloadExpr(native.ToPointer(), skipVTables);
                }

                internal static new OverloadExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (OverloadExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static OverloadExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new OverloadExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private OverloadExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected OverloadExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public OverloadExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OverloadExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public OverloadExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OverloadExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public OverloadExpr(global::CppSharp.Parser.AST.OverloadExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.OverloadExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.OverloadExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.OverloadExpr.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.OverloadExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.OverloadExpr(klass);
                }

                public uint NumDecls
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numDecls;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numDecls = value;
                    }
                }

                public global::CppSharp.Parser.SourceLocation NameLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->nameLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->nameLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation TemplateKeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->templateKeywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templateKeywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lAngleLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rAngleLoc = value.__Instance;
                    }
                }

                public bool HasTemplateKeyword
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKeyword != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKeyword = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitTemplateArgs != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitTemplateArgs = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numTemplateArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numTemplateArgs = value;
                    }
                }
            }

            public unsafe partial class UnresolvedLookupExpr : global::CppSharp.Parser.AST.OverloadExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 112)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal uint numDecls;
                    internal global::CppSharp.Parser.SourceLocation.__Internal nameLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;
                    internal byte requiresADL;
                    internal byte isOverloaded;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20UnresolvedLookupExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20UnresolvedLookupExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnresolvedLookupExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnresolvedLookupExpr(native.ToPointer(), skipVTables);
                }

                internal static new UnresolvedLookupExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnresolvedLookupExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnresolvedLookupExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnresolvedLookupExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private UnresolvedLookupExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnresolvedLookupExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnresolvedLookupExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedLookupExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnresolvedLookupExpr(global::CppSharp.Parser.AST.UnresolvedLookupExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedLookupExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.UnresolvedLookupExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.UnresolvedLookupExpr.__Internal*) _0.__Instance);
                }

                public bool RequiresADL
                {
                    get
                    {
                        return ((__Internal*)__Instance)->requiresADL != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->requiresADL = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsOverloaded
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isOverloaded != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isOverloaded = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class DependentScopeDeclRefExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal location;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25DependentScopeDeclRefExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST25DependentScopeDeclRefExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DependentScopeDeclRefExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DependentScopeDeclRefExpr(native.ToPointer(), skipVTables);
                }

                internal static new DependentScopeDeclRefExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DependentScopeDeclRefExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DependentScopeDeclRefExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DependentScopeDeclRefExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DependentScopeDeclRefExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DependentScopeDeclRefExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DependentScopeDeclRefExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentScopeDeclRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DependentScopeDeclRefExpr(global::CppSharp.Parser.AST.DependentScopeDeclRefExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentScopeDeclRefExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DependentScopeDeclRefExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DependentScopeDeclRefExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation Location
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->location);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->location = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation TemplateKeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->templateKeywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templateKeywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lAngleLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rAngleLoc = value.__Instance;
                    }
                }

                public bool HasTemplateKeyword
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKeyword != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKeyword = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitTemplateArgs != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitTemplateArgs = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numTemplateArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numTemplateArgs = value;
                    }
                }
            }

            public unsafe partial class ExprWithCleanups : global::CppSharp.Parser.AST.FullExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr subExpr;
                    internal uint numObjects;
                    internal byte cleanupsHaveSideEffects;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ExprWithCleanupsC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST16ExprWithCleanupsC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new ExprWithCleanups __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new ExprWithCleanups(native.ToPointer(), skipVTables);
                }

                internal static new ExprWithCleanups __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (ExprWithCleanups)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static ExprWithCleanups __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new ExprWithCleanups(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private ExprWithCleanups(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected ExprWithCleanups(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public ExprWithCleanups()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExprWithCleanups.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public ExprWithCleanups(global::CppSharp.Parser.AST.ExprWithCleanups _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.ExprWithCleanups.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.ExprWithCleanups.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.ExprWithCleanups.__Internal*) _0.__Instance);
                }

                public uint NumObjects
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numObjects;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numObjects = value;
                    }
                }

                public bool CleanupsHaveSideEffects
                {
                    get
                    {
                        return ((__Internal*)__Instance)->cleanupsHaveSideEffects != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->cleanupsHaveSideEffects = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXUnresolvedConstructExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::Std.Vector.__Internal arguments;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lParenLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal typeAsWritten;
                    internal byte isListInitialization;
                    internal uint arg_size;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExprD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void dtor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExpr12getargumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern __IntPtr Getarguments(__IntPtr __instance, uint i);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExpr12addargumentsERPNS1_4ExprE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Addarguments(__IntPtr __instance, __IntPtr s);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExpr14clearargumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void Cleararguments(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST26CXXUnresolvedConstructExpr17getargumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern uint GetargumentsCount(__IntPtr __instance);
                }

                internal static new CXXUnresolvedConstructExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXUnresolvedConstructExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXUnresolvedConstructExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXUnresolvedConstructExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXUnresolvedConstructExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXUnresolvedConstructExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    global::CppSharp.Parser.AST.CXXUnresolvedConstructExpr.__Internal.cctor(ret, new __IntPtr(&native));
                    return ret.ToPointer();
                }

                private CXXUnresolvedConstructExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXUnresolvedConstructExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXUnresolvedConstructExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXUnresolvedConstructExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXUnresolvedConstructExpr(global::CppSharp.Parser.AST.CXXUnresolvedConstructExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXUnresolvedConstructExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    if (ReferenceEquals(_0, null))
                        throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                    var __arg0 = _0.__Instance;
                    __Internal.cctor(__Instance, __arg0);
                }

                partial void DisposePartial(bool disposing);

                internal protected override void Dispose(bool disposing, bool callNativeDtor )
                {
                    if (__Instance == IntPtr.Zero)
                        return;
                    NativeToManagedMap.TryRemove(__Instance, out _);
                    DisposePartial(disposing);
                    if (callNativeDtor)
                        __Internal.dtor(__Instance);
                    if (__ownsNativeInstance)
                        Marshal.FreeHGlobal(__Instance);
                    __Instance = IntPtr.Zero;
                }

                public global::CppSharp.Parser.AST.Expr Getarguments(uint i)
                {
                    var ___ret = __Internal.Getarguments(__Instance, i);
                    var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(___ret, false);
                    return __result0;
                }

                public void Addarguments(global::CppSharp.Parser.AST.Expr s)
                {
                    if (ReferenceEquals(s, null))
                        throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                    var ____arg0 = s.__Instance;
                    var __arg0 = new __IntPtr(&____arg0);
                    __Internal.Addarguments(__Instance, __arg0);
                }

                public void Cleararguments()
                {
                    __Internal.Cleararguments(__Instance);
                }

                public global::CppSharp.Parser.SourceLocation LParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType TypeAsWritten
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->typeAsWritten));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->typeAsWritten = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool IsListInitialization
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isListInitialization != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isListInitialization = (byte) (value ? 1 : 0);
                    }
                }

                public uint ArgSize
                {
                    get
                    {
                        return ((__Internal*)__Instance)->arg_size;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->arg_size = value;
                    }
                }

                public uint GetargumentsCount
                {
                    get
                    {
                        var ___ret = __Internal.GetargumentsCount(__Instance);
                        return ___ret;
                    }
                }
            }

            public unsafe partial class CXXDependentScopeMemberExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 144)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal byte isImplicitAccess;
                    internal __IntPtr @base;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal baseType;
                    internal byte isArrow;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal __IntPtr firstQualifierFoundInScope;
                    internal global::CppSharp.Parser.SourceLocation.__Internal memberLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27CXXDependentScopeMemberExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST27CXXDependentScopeMemberExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXDependentScopeMemberExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXDependentScopeMemberExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXDependentScopeMemberExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXDependentScopeMemberExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXDependentScopeMemberExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXDependentScopeMemberExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXDependentScopeMemberExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXDependentScopeMemberExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXDependentScopeMemberExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDependentScopeMemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXDependentScopeMemberExpr(global::CppSharp.Parser.AST.CXXDependentScopeMemberExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXDependentScopeMemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXDependentScopeMemberExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXDependentScopeMemberExpr.__Internal*) _0.__Instance);
                }

                public bool IsImplicitAccess
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicitAccess != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicitAccess = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType BaseType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->baseType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->baseType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool IsArrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrow = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration FirstQualifierFoundInScope
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->firstQualifierFoundInScope, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->firstQualifierFoundInScope = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation MemberLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->memberLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->memberLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation TemplateKeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->templateKeywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->templateKeywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation LAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->lAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lAngleLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RAngleLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rAngleLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rAngleLoc = value.__Instance;
                    }
                }

                public bool HasTemplateKeyword
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasTemplateKeyword != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasTemplateKeyword = (byte) (value ? 1 : 0);
                    }
                }

                public bool HasExplicitTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasExplicitTemplateArgs != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasExplicitTemplateArgs = (byte) (value ? 1 : 0);
                    }
                }

                public uint NumTemplateArgs
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numTemplateArgs;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numTemplateArgs = value;
                    }
                }
            }

            public unsafe partial class UnresolvedMemberExpr : global::CppSharp.Parser.AST.OverloadExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 152)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal uint numDecls;
                    internal global::CppSharp.Parser.SourceLocation.__Internal nameLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal templateKeywordLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal lAngleLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rAngleLoc;
                    internal byte hasTemplateKeyword;
                    internal byte hasExplicitTemplateArgs;
                    internal uint numTemplateArgs;
                    internal byte isImplicitAccess;
                    internal __IntPtr @base;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal baseType;
                    internal byte hasUnresolvedUsing;
                    internal byte isArrow;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal memberLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20UnresolvedMemberExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20UnresolvedMemberExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new UnresolvedMemberExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new UnresolvedMemberExpr(native.ToPointer(), skipVTables);
                }

                internal static new UnresolvedMemberExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (UnresolvedMemberExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static UnresolvedMemberExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new UnresolvedMemberExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private UnresolvedMemberExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected UnresolvedMemberExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public UnresolvedMemberExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedMemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public UnresolvedMemberExpr(global::CppSharp.Parser.AST.UnresolvedMemberExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.UnresolvedMemberExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.UnresolvedMemberExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.UnresolvedMemberExpr.__Internal*) _0.__Instance);
                }

                public bool IsImplicitAccess
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicitAccess != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicitAccess = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr Base
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->@base, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->@base = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.QualifiedType BaseType
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->baseType));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->baseType = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
                    }
                }

                public bool HasUnresolvedUsing
                {
                    get
                    {
                        return ((__Internal*)__Instance)->hasUnresolvedUsing != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->hasUnresolvedUsing = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsArrow
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isArrow != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isArrow = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation MemberLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->memberLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->memberLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CXXNoexceptExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr operand;
                    internal byte value;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15CXXNoexceptExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST15CXXNoexceptExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXNoexceptExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXNoexceptExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXNoexceptExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXNoexceptExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXNoexceptExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXNoexceptExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXNoexceptExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXNoexceptExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXNoexceptExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNoexceptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXNoexceptExpr(global::CppSharp.Parser.AST.CXXNoexceptExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXNoexceptExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXNoexceptExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXNoexceptExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Operand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->operand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool Value
                {
                    get
                    {
                        return ((__Internal*)__Instance)->value != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->value = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 96)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr pattern;
                    internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new PackExpansionExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new PackExpansionExpr(native.ToPointer(), skipVTables);
                }

                internal static new PackExpansionExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (PackExpansionExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static PackExpansionExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new PackExpansionExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private PackExpansionExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected PackExpansionExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public PackExpansionExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PackExpansionExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public PackExpansionExpr(global::CppSharp.Parser.AST.PackExpansionExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.PackExpansionExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.PackExpansionExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.PackExpansionExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Pattern
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->pattern, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->pattern = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation EllipsisLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ellipsisLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal operatorLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal packLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
                    internal __IntPtr pack;
                    internal uint packLength;
                    internal byte isPartiallySubstituted;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14SizeOfPackExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST14SizeOfPackExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SizeOfPackExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SizeOfPackExpr(native.ToPointer(), skipVTables);
                }

                internal static new SizeOfPackExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SizeOfPackExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SizeOfPackExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SizeOfPackExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SizeOfPackExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SizeOfPackExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SizeOfPackExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SizeOfPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SizeOfPackExpr(global::CppSharp.Parser.AST.SizeOfPackExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SizeOfPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SizeOfPackExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SizeOfPackExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation OperatorLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->operatorLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation PackLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->packLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->packLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation RParenLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->rParenLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rParenLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Declaration Pack
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->pack, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->pack = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint PackLength
                {
                    get
                    {
                        return ((__Internal*)__Instance)->packLength;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->packLength = value;
                    }
                }

                public bool IsPartiallySubstituted
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isPartiallySubstituted != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isPartiallySubstituted = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal nameLoc;
                    internal __IntPtr replacement;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SubstNonTypeTemplateParmExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SubstNonTypeTemplateParmExpr(native.ToPointer(), skipVTables);
                }

                internal static new SubstNonTypeTemplateParmExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SubstNonTypeTemplateParmExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SubstNonTypeTemplateParmExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SubstNonTypeTemplateParmExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SubstNonTypeTemplateParmExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SubstNonTypeTemplateParmExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SubstNonTypeTemplateParmExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SubstNonTypeTemplateParmExpr(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SubstNonTypeTemplateParmExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SubstNonTypeTemplateParmExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation NameLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->nameLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->nameLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Replacement
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->replacement, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->replacement = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class SubstNonTypeTemplateParmPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal parameterPackLocation;
                    internal global::CppSharp.Parser.AST.TemplateArgument.__Internal argumentPack;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST32SubstNonTypeTemplateParmPackExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST32SubstNonTypeTemplateParmPackExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new SubstNonTypeTemplateParmPackExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new SubstNonTypeTemplateParmPackExpr(native.ToPointer(), skipVTables);
                }

                internal static new SubstNonTypeTemplateParmPackExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (SubstNonTypeTemplateParmPackExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static SubstNonTypeTemplateParmPackExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new SubstNonTypeTemplateParmPackExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private SubstNonTypeTemplateParmPackExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected SubstNonTypeTemplateParmPackExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public SubstNonTypeTemplateParmPackExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public SubstNonTypeTemplateParmPackExpr(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmPackExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.SubstNonTypeTemplateParmPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.SubstNonTypeTemplateParmPackExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.SubstNonTypeTemplateParmPackExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation ParameterPackLocation
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->parameterPackLocation);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->parameterPackLocation = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.TemplateArgument ArgumentPack
                {
                    get
                    {
                        return global::CppSharp.Parser.AST.TemplateArgument.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->argumentPack));
                    }

                    set
                    {
                        if (ReferenceEquals(value, null))
                            throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value.");
                        ((__Internal*)__Instance)->argumentPack = *(global::CppSharp.Parser.AST.TemplateArgument.__Internal*) value.__Instance;
                    }
                }
            }

            public unsafe partial class FunctionParmPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 88)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal parameterPackLocation;
                    internal uint numExpansions;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20FunctionParmPackExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20FunctionParmPackExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new FunctionParmPackExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new FunctionParmPackExpr(native.ToPointer(), skipVTables);
                }

                internal static new FunctionParmPackExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (FunctionParmPackExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static FunctionParmPackExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new FunctionParmPackExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private FunctionParmPackExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected FunctionParmPackExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public FunctionParmPackExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionParmPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public FunctionParmPackExpr(global::CppSharp.Parser.AST.FunctionParmPackExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.FunctionParmPackExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.FunctionParmPackExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.FunctionParmPackExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.SourceLocation ParameterPackLocation
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->parameterPackLocation);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->parameterPackLocation = value.__Instance;
                    }
                }

                public uint NumExpansions
                {
                    get
                    {
                        return ((__Internal*)__Instance)->numExpansions;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->numExpansions = value;
                    }
                }
            }

            public unsafe partial class MaterializeTemporaryExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr temporary;
                    internal __IntPtr TemporaryExpr;
                    internal uint manglingNumber;
                    internal byte isBoundToLvalueReference;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24MaterializeTemporaryExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24MaterializeTemporaryExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public unsafe partial class ExtraState : IDisposable
                {
                    [StructLayout(LayoutKind.Sequential, Size = 1)]
                    public partial struct __Internal
                    {
                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24MaterializeTemporaryExpr10ExtraStateC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void ctor(__IntPtr __instance);

                        [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24MaterializeTemporaryExpr10ExtraStateC2ERKS3_", CallingConvention = __CallingConvention.Cdecl)]
                        internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                    }

                    public __IntPtr __Instance { get; protected set; }

                    internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState> NativeToManagedMap =
                        new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState>();

                    internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState managed)
                    {
                        NativeToManagedMap[native] = managed;
                    }

                    internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState managed)
                    {
    
                        return NativeToManagedMap.TryGetValue(native, out managed);
                    }

                    protected bool __ownsNativeInstance;

                    internal static ExtraState __CreateInstance(__IntPtr native, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        return new ExtraState(native.ToPointer(), skipVTables);
                    }

                    internal static ExtraState __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                    {
                        if (native == __IntPtr.Zero)
                            return null;
                        if (__TryGetNativeToManagedMapping(native, out var managed))
                            return (ExtraState)managed;
                        var result = __CreateInstance(native, skipVTables);
                        if (saveInstance)
                            __RecordNativeToManagedMapping(native, result);
                        return result;
                    }

                    internal static ExtraState __CreateInstance(__Internal native, bool skipVTables = false)
                    {
                        return new ExtraState(native, skipVTables);
                    }

                    private static void* __CopyValue(__Internal native)
                    {
                        var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                        *(__Internal*) ret = native;
                        return ret.ToPointer();
                    }

                    private ExtraState(__Internal native, bool skipVTables = false)
                        : this(__CopyValue(native), skipVTables)
                    {
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                    }

                    protected ExtraState(void* native, bool skipVTables = false)
                    {
                        if (native == null)
                            return;
                        __Instance = new __IntPtr(native);
                    }

                    public ExtraState()
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        __Internal.ctor(__Instance);
                    }

                    public ExtraState(global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState _0)
                    {
                        __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState.__Internal));
                        __ownsNativeInstance = true;
                        __RecordNativeToManagedMapping(__Instance, this);
                        *((global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MaterializeTemporaryExpr.ExtraState.__Internal*) _0.__Instance);
                    }

                    public void Dispose()
                    {
                        Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
                    }

                    partial void DisposePartial(bool disposing);

                    internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
                    {
                        if (__Instance == IntPtr.Zero)
                            return;
                        NativeToManagedMap.TryRemove(__Instance, out _);
                        DisposePartial(disposing);
                        if (__ownsNativeInstance)
                            Marshal.FreeHGlobal(__Instance);
                        __Instance = IntPtr.Zero;
                    }
                }

                internal static new MaterializeTemporaryExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new MaterializeTemporaryExpr(native.ToPointer(), skipVTables);
                }

                internal static new MaterializeTemporaryExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (MaterializeTemporaryExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static MaterializeTemporaryExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new MaterializeTemporaryExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private MaterializeTemporaryExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected MaterializeTemporaryExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public MaterializeTemporaryExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MaterializeTemporaryExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public MaterializeTemporaryExpr(global::CppSharp.Parser.AST.MaterializeTemporaryExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.MaterializeTemporaryExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.MaterializeTemporaryExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.MaterializeTemporaryExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Stmt Temporary
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Stmt.__GetOrCreateInstance(((__Internal*)__Instance)->temporary, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->temporary = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr TemporaryExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->TemporaryExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->TemporaryExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public uint ManglingNumber
                {
                    get
                    {
                        return ((__Internal*)__Instance)->manglingNumber;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->manglingNumber = value;
                    }
                }

                public bool IsBoundToLvalueReference
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isBoundToLvalueReference != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isBoundToLvalueReference = (byte) (value ? 1 : 0);
                    }
                }
            }

            public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr lHS;
                    internal __IntPtr rHS;
                    internal byte isRightFold;
                    internal byte isLeftFold;
                    internal __IntPtr pattern;
                    internal __IntPtr init;
                    internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
                    internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CXXFoldExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CXXFoldExpr(native.ToPointer(), skipVTables);
                }

                internal static new CXXFoldExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CXXFoldExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CXXFoldExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CXXFoldExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CXXFoldExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CXXFoldExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CXXFoldExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXFoldExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CXXFoldExpr(global::CppSharp.Parser.AST.CXXFoldExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CXXFoldExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CXXFoldExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CXXFoldExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr LHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->lHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->lHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr RHS
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->rHS, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->rHS = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public bool IsRightFold
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isRightFold != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isRightFold = (byte) (value ? 1 : 0);
                    }
                }

                public bool IsLeftFold
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isLeftFold != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isLeftFold = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr Pattern
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->pattern, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->pattern = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr Init
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->init, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->init = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation EllipsisLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->ellipsisLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.BinaryOperatorKind Operator
                {
                    get
                    {
                        return ((__Internal*)__Instance)->_operator;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->_operator = value;
                    }
                }
            }

            public unsafe partial class CoroutineSuspendExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 120)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal __IntPtr commonExpr;
                    internal __IntPtr opaqueValue;
                    internal __IntPtr readyExpr;
                    internal __IntPtr suspendExpr;
                    internal __IntPtr resumeExpr;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20CoroutineSuspendExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20CoroutineSuspendExprC2ENS1_9StmtClassE", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance, global::CppSharp.Parser.AST.StmtClass klass);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20CoroutineSuspendExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                public enum SubExpr
                {
                    Common = 0,
                    Ready = 1,
                    Suspend = 2,
                    Resume = 3,
                    Count = 4
                }

                internal static new CoroutineSuspendExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CoroutineSuspendExpr(native.ToPointer(), skipVTables);
                }

                internal static new CoroutineSuspendExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CoroutineSuspendExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CoroutineSuspendExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CoroutineSuspendExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CoroutineSuspendExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CoroutineSuspendExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CoroutineSuspendExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineSuspendExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CoroutineSuspendExpr(global::CppSharp.Parser.AST.StmtClass klass)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineSuspendExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance, klass);
                }

                public CoroutineSuspendExpr(global::CppSharp.Parser.AST.CoroutineSuspendExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoroutineSuspendExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CoroutineSuspendExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoroutineSuspendExpr.__Internal*) _0.__Instance);
                }

                public static implicit operator global::CppSharp.Parser.AST.CoroutineSuspendExpr(global::CppSharp.Parser.AST.StmtClass klass)
                {
                    return new global::CppSharp.Parser.AST.CoroutineSuspendExpr(klass);
                }

                public global::CppSharp.Parser.SourceLocation KeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->keywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->keywordLoc = value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr CommonExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->commonExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->commonExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.OpaqueValueExpr OpaqueValue
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.OpaqueValueExpr.__GetOrCreateInstance(((__Internal*)__Instance)->opaqueValue, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->opaqueValue = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ReadyExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->readyExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->readyExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr SuspendExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->suspendExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->suspendExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.Expr ResumeExpr
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->resumeExpr, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->resumeExpr = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class CoawaitExpr : global::CppSharp.Parser.AST.CoroutineSuspendExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 136)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal __IntPtr commonExpr;
                    internal __IntPtr opaqueValue;
                    internal __IntPtr readyExpr;
                    internal __IntPtr suspendExpr;
                    internal __IntPtr resumeExpr;
                    internal byte isImplicit;
                    internal __IntPtr operand;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CoawaitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CoawaitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CoawaitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CoawaitExpr(native.ToPointer(), skipVTables);
                }

                internal static new CoawaitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CoawaitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CoawaitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CoawaitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CoawaitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CoawaitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CoawaitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoawaitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CoawaitExpr(global::CppSharp.Parser.AST.CoawaitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoawaitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CoawaitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoawaitExpr.__Internal*) _0.__Instance);
                }

                public bool IsImplicit
                {
                    get
                    {
                        return ((__Internal*)__Instance)->isImplicit != 0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->isImplicit = (byte) (value ? 1 : 0);
                    }
                }

                public global::CppSharp.Parser.AST.Expr Operand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->operand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }

            public unsafe partial class DependentCoawaitExpr : global::CppSharp.Parser.AST.Expr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 104)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal __IntPtr operand;
                    internal __IntPtr operatorCoawaitLookup;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20DependentCoawaitExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST20DependentCoawaitExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new DependentCoawaitExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new DependentCoawaitExpr(native.ToPointer(), skipVTables);
                }

                internal static new DependentCoawaitExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (DependentCoawaitExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static DependentCoawaitExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new DependentCoawaitExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private DependentCoawaitExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected DependentCoawaitExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public DependentCoawaitExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentCoawaitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public DependentCoawaitExpr(global::CppSharp.Parser.AST.DependentCoawaitExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentCoawaitExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.DependentCoawaitExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.DependentCoawaitExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Operand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->operand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.AST.UnresolvedLookupExpr OperatorCoawaitLookup
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.UnresolvedLookupExpr.__GetOrCreateInstance(((__Internal*)__Instance)->operatorCoawaitLookup, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operatorCoawaitLookup = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }

                public global::CppSharp.Parser.SourceLocation KeywordLoc
                {
                    get
                    {
                        return global::CppSharp.Parser.SourceLocation.__CreateInstance(((__Internal*)__Instance)->keywordLoc);
                    }

                    set
                    {
                        ((__Internal*)__Instance)->keywordLoc = value.__Instance;
                    }
                }
            }

            public unsafe partial class CoyieldExpr : global::CppSharp.Parser.AST.CoroutineSuspendExpr, IDisposable
            {
                [StructLayout(LayoutKind.Sequential, Size = 128)]
                public new partial struct __Internal
                {
                    internal global::CppSharp.Parser.AST.StmtClass stmtClass;
                    internal global::CppSharp.Parser.SourceRange.__Internal sourceRange;
                    internal global::CppSharp.Parser.SourceLocation.__Internal beginLoc;
                    internal global::CppSharp.Parser.SourceLocation.__Internal endLoc;
                    internal global::CppSharp.Parser.AST.QualifiedType.__Internal type;
                    internal byte valueDependent;
                    internal byte typeDependent;
                    internal byte instantiationDependent;
                    internal byte containsUnexpandedParameterPack;
                    internal global::CppSharp.Parser.SourceLocation.__Internal exprLoc;
                    internal byte isLValue;
                    internal byte isRValue;
                    internal byte isXValue;
                    internal byte isGLValue;
                    internal byte isOrdinaryOrBitFieldObject;
                    internal __IntPtr sourceBitField;
                    internal __IntPtr referencedDeclOfCallee;
                    internal byte hasPlaceholderType;
                    internal global::CppSharp.Parser.SourceLocation.__Internal keywordLoc;
                    internal __IntPtr commonExpr;
                    internal __IntPtr opaqueValue;
                    internal __IntPtr readyExpr;
                    internal __IntPtr suspendExpr;
                    internal __IntPtr resumeExpr;
                    internal __IntPtr operand;

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CoyieldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void ctor(__IntPtr __instance);

                    [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CoyieldExprC2ERKS2_", CallingConvention = __CallingConvention.Cdecl)]
                    internal static extern void cctor(__IntPtr __instance, __IntPtr _0);
                }

                internal static new CoyieldExpr __CreateInstance(__IntPtr native, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    return new CoyieldExpr(native.ToPointer(), skipVTables);
                }

                internal static new CoyieldExpr __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
                {
                    if (native == __IntPtr.Zero)
                        return null;
                    if (__TryGetNativeToManagedMapping(native, out var managed))
                        return (CoyieldExpr)managed;
                    var result = __CreateInstance(native, skipVTables);
                    if (saveInstance)
                        __RecordNativeToManagedMapping(native, result);
                    return result;
                }

                internal static CoyieldExpr __CreateInstance(__Internal native, bool skipVTables = false)
                {
                    return new CoyieldExpr(native, skipVTables);
                }

                private static void* __CopyValue(__Internal native)
                {
                    var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                    *(__Internal*) ret = native;
                    return ret.ToPointer();
                }

                private CoyieldExpr(__Internal native, bool skipVTables = false)
                    : this(__CopyValue(native), skipVTables)
                {
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                }

                protected CoyieldExpr(void* native, bool skipVTables = false)
                    : base((void*) native)
                {
                }

                public CoyieldExpr()
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoyieldExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    __Internal.ctor(__Instance);
                }

                public CoyieldExpr(global::CppSharp.Parser.AST.CoyieldExpr _0)
                    : this((void*) null)
                {
                    __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.CoyieldExpr.__Internal));
                    __ownsNativeInstance = true;
                    __RecordNativeToManagedMapping(__Instance, this);
                    *((global::CppSharp.Parser.AST.CoyieldExpr.__Internal*) __Instance) = *((global::CppSharp.Parser.AST.CoyieldExpr.__Internal*) _0.__Instance);
                }

                public global::CppSharp.Parser.AST.Expr Operand
                {
                    get
                    {
                        var __result0 = global::CppSharp.Parser.AST.Expr.__GetOrCreateInstance(((__Internal*)__Instance)->operand, false);
                        return __result0;
                    }

                    set
                    {
                        ((__Internal*)__Instance)->operand = value is null ? __IntPtr.Zero : value.__Instance;
                    }
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        public enum ParserIntType
        {
            NoInt = 0,
            SignedChar = 1,
            UnsignedChar = 2,
            SignedShort = 3,
            UnsignedShort = 4,
            SignedInt = 5,
            UnsignedInt = 6,
            SignedLong = 7,
            UnsignedLong = 8,
            SignedLongLong = 9,
            UnsignedLongLong = 10
        }

        public unsafe partial class ParserTargetInfo : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 192)]
            public partial struct __Internal
            {
                internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C ABI;
                internal global::CppSharp.Parser.ParserIntType char16Type;
                internal global::CppSharp.Parser.ParserIntType char32Type;
                internal global::CppSharp.Parser.ParserIntType int64Type;
                internal global::CppSharp.Parser.ParserIntType intMaxType;
                internal global::CppSharp.Parser.ParserIntType intPtrType;
                internal global::CppSharp.Parser.ParserIntType sizeType;
                internal global::CppSharp.Parser.ParserIntType uIntMaxType;
                internal global::CppSharp.Parser.ParserIntType wCharType;
                internal global::CppSharp.Parser.ParserIntType wIntType;
                internal uint boolAlign;
                internal uint boolWidth;
                internal uint charAlign;
                internal uint charWidth;
                internal uint char16Align;
                internal uint char16Width;
                internal uint char32Align;
                internal uint char32Width;
                internal uint halfAlign;
                internal uint halfWidth;
                internal uint floatAlign;
                internal uint floatWidth;
                internal uint doubleAlign;
                internal uint doubleWidth;
                internal uint shortAlign;
                internal uint shortWidth;
                internal uint intAlign;
                internal uint intWidth;
                internal uint intMaxTWidth;
                internal uint longAlign;
                internal uint longWidth;
                internal uint longDoubleAlign;
                internal uint longDoubleWidth;
                internal uint longLongAlign;
                internal uint longLongWidth;
                internal uint pointerAlign;
                internal uint pointerWidth;
                internal uint wCharAlign;
                internal uint wCharWidth;
                internal uint float128Align;
                internal uint float128Width;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserTargetInfoC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserTargetInfoC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserTargetInfoD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void dtor(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserTargetInfo> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserTargetInfo>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.ParserTargetInfo managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.ParserTargetInfo managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static ParserTargetInfo __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new ParserTargetInfo(native.ToPointer(), skipVTables);
            }

            internal static ParserTargetInfo __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (ParserTargetInfo)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static ParserTargetInfo __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new ParserTargetInfo(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                global::CppSharp.Parser.ParserTargetInfo.__Internal.cctor(ret, new __IntPtr(&native));
                return ret.ToPointer();
            }

            private ParserTargetInfo(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected ParserTargetInfo(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public ParserTargetInfo()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserTargetInfo.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public ParserTargetInfo(global::CppSharp.Parser.ParserTargetInfo _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserTargetInfo.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                if (ReferenceEquals(_0, null))
                    throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = _0.__Instance;
                __Internal.cctor(__Instance, __arg0);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (callNativeDtor)
                    __Internal.dtor(__Instance);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public string ABI
            {
                get
                {
                    var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->ABI));
                    return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                }

                set
                {
                    global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->ABI), value);
                }
            }

            public global::CppSharp.Parser.ParserIntType Char16Type
            {
                get
                {
                    return ((__Internal*)__Instance)->char16Type;
                }

                set
                {
                    ((__Internal*)__Instance)->char16Type = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType Char32Type
            {
                get
                {
                    return ((__Internal*)__Instance)->char32Type;
                }

                set
                {
                    ((__Internal*)__Instance)->char32Type = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType Int64Type
            {
                get
                {
                    return ((__Internal*)__Instance)->int64Type;
                }

                set
                {
                    ((__Internal*)__Instance)->int64Type = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType IntMaxType
            {
                get
                {
                    return ((__Internal*)__Instance)->intMaxType;
                }

                set
                {
                    ((__Internal*)__Instance)->intMaxType = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType IntPtrType
            {
                get
                {
                    return ((__Internal*)__Instance)->intPtrType;
                }

                set
                {
                    ((__Internal*)__Instance)->intPtrType = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType SizeType
            {
                get
                {
                    return ((__Internal*)__Instance)->sizeType;
                }

                set
                {
                    ((__Internal*)__Instance)->sizeType = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType UIntMaxType
            {
                get
                {
                    return ((__Internal*)__Instance)->uIntMaxType;
                }

                set
                {
                    ((__Internal*)__Instance)->uIntMaxType = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType WCharType
            {
                get
                {
                    return ((__Internal*)__Instance)->wCharType;
                }

                set
                {
                    ((__Internal*)__Instance)->wCharType = value;
                }
            }

            public global::CppSharp.Parser.ParserIntType WIntType
            {
                get
                {
                    return ((__Internal*)__Instance)->wIntType;
                }

                set
                {
                    ((__Internal*)__Instance)->wIntType = value;
                }
            }

            public uint BoolAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->boolAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->boolAlign = value;
                }
            }

            public uint BoolWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->boolWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->boolWidth = value;
                }
            }

            public uint CharAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->charAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->charAlign = value;
                }
            }

            public uint CharWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->charWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->charWidth = value;
                }
            }

            public uint Char16Align
            {
                get
                {
                    return ((__Internal*)__Instance)->char16Align;
                }

                set
                {
                    ((__Internal*)__Instance)->char16Align = value;
                }
            }

            public uint Char16Width
            {
                get
                {
                    return ((__Internal*)__Instance)->char16Width;
                }

                set
                {
                    ((__Internal*)__Instance)->char16Width = value;
                }
            }

            public uint Char32Align
            {
                get
                {
                    return ((__Internal*)__Instance)->char32Align;
                }

                set
                {
                    ((__Internal*)__Instance)->char32Align = value;
                }
            }

            public uint Char32Width
            {
                get
                {
                    return ((__Internal*)__Instance)->char32Width;
                }

                set
                {
                    ((__Internal*)__Instance)->char32Width = value;
                }
            }

            public uint HalfAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->halfAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->halfAlign = value;
                }
            }

            public uint HalfWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->halfWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->halfWidth = value;
                }
            }

            public uint FloatAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->floatAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->floatAlign = value;
                }
            }

            public uint FloatWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->floatWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->floatWidth = value;
                }
            }

            public uint DoubleAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->doubleAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->doubleAlign = value;
                }
            }

            public uint DoubleWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->doubleWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->doubleWidth = value;
                }
            }

            public uint ShortAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->shortAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->shortAlign = value;
                }
            }

            public uint ShortWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->shortWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->shortWidth = value;
                }
            }

            public uint IntAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->intAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->intAlign = value;
                }
            }

            public uint IntWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->intWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->intWidth = value;
                }
            }

            public uint IntMaxTWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->intMaxTWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->intMaxTWidth = value;
                }
            }

            public uint LongAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->longAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->longAlign = value;
                }
            }

            public uint LongWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->longWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->longWidth = value;
                }
            }

            public uint LongDoubleAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->longDoubleAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->longDoubleAlign = value;
                }
            }

            public uint LongDoubleWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->longDoubleWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->longDoubleWidth = value;
                }
            }

            public uint LongLongAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->longLongAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->longLongAlign = value;
                }
            }

            public uint LongLongWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->longLongWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->longLongWidth = value;
                }
            }

            public uint PointerAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->pointerAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->pointerAlign = value;
                }
            }

            public uint PointerWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->pointerWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->pointerWidth = value;
                }
            }

            public uint WCharAlign
            {
                get
                {
                    return ((__Internal*)__Instance)->wCharAlign;
                }

                set
                {
                    ((__Internal*)__Instance)->wCharAlign = value;
                }
            }

            public uint WCharWidth
            {
                get
                {
                    return ((__Internal*)__Instance)->wCharWidth;
                }

                set
                {
                    ((__Internal*)__Instance)->wCharWidth = value;
                }
            }

            public uint Float128Align
            {
                get
                {
                    return ((__Internal*)__Instance)->float128Align;
                }

                set
                {
                    ((__Internal*)__Instance)->float128Align = value;
                }
            }

            public uint Float128Width
            {
                get
                {
                    return ((__Internal*)__Instance)->float128Width;
                }

                set
                {
                    ((__Internal*)__Instance)->float128Width = value;
                }
            }
        }
    }
}

namespace CppSharp
{
    namespace Parser
    {
        public enum ParserDiagnosticLevel
        {
            Ignored = 0,
            Note = 1,
            Warning = 2,
            Error = 3,
            Fatal = 4
        }

        public enum ParserResultKind
        {
            Success = 0,
            Error = 1,
            FileNotFound = 2
        }

        public enum SourceLocationKind
        {
            Invalid = 0,
            Builtin = 1,
            CommandLine = 2,
            System = 3,
            User = 4
        }

        public unsafe partial class Parser
        {
            public partial struct __Internal
            {
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.Parser> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.Parser>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.Parser managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.Parser managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static Parser __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new Parser(native.ToPointer(), skipVTables);
            }

            internal static Parser __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (Parser)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static Parser __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new Parser(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                *(__Internal*) ret = native;
                return ret.ToPointer();
            }

            private Parser(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected Parser(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }
        }

        public unsafe partial class CppParserOptions : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 304)]
            public partial struct __Internal
            {
                internal global::Std.Vector.__Internal Arguments;
                internal global::Std.Vector.__Internal CompilationOptions;
                internal global::Std.Vector.__Internal SourceFiles;
                internal global::Std.Vector.__Internal IncludeDirs;
                internal global::Std.Vector.__Internal SystemIncludeDirs;
                internal global::Std.Vector.__Internal Defines;
                internal global::Std.Vector.__Internal Undefines;
                internal global::Std.Vector.__Internal SupportedStdTypes;
                internal global::Std.Vector.__Internal SupportedFunctionTemplates;
                internal __IntPtr ASTContext;
                internal int toolSetToUse;
                internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C targetTriple;
                internal byte noStandardIncludes;
                internal byte noBuiltinIncludes;
                internal byte microsoftMode;
                internal byte verbose;
                internal byte unityBuild;
                internal byte skipPrivateDeclarations;
                internal byte skipLayoutInfo;
                internal byte skipFunctionBodies;
                internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C clangVersion;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptionsC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptionsC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptionsD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void dtor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetArguments(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions12addArgumentsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddArguments(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearArguments(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions21getCompilationOptionsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetCompilationOptions(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions21addCompilationOptionsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddCompilationOptions(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions23clearCompilationOptionsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearCompilationOptions(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14getSourceFilesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetSourceFiles(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14addSourceFilesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddSourceFiles(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions16clearSourceFilesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearSourceFiles(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14getIncludeDirsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetIncludeDirs(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14addIncludeDirsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddIncludeDirs(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions16clearIncludeDirsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearIncludeDirs(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions20getSystemIncludeDirsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetSystemIncludeDirs(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions20addSystemIncludeDirsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddSystemIncludeDirs(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions22clearSystemIncludeDirsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearSystemIncludeDirs(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions10getDefinesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetDefines(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions10addDefinesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddDefines(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions12clearDefinesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearDefines(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions12getUndefinesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetUndefines(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions12addUndefinesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddUndefines(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions14clearUndefinesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearUndefines(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions20getSupportedStdTypesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetSupportedStdTypes(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions20addSupportedStdTypesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddSupportedStdTypes(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions22clearSupportedStdTypesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearSupportedStdTypes(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions29getSupportedFunctionTemplatesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetSupportedFunctionTemplates(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions29addSupportedFunctionTemplatesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddSupportedFunctionTemplates(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions31clearSupportedFunctionTemplatesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearSupportedFunctionTemplates(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions15getClangVersionB5cxx11Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void GetClangVersion(__IntPtr @return, __IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetArgumentsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions26getCompilationOptionsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetCompilationOptionsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions19getSourceFilesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetSourceFilesCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions19getIncludeDirsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetIncludeDirsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions25getSystemIncludeDirsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetSystemIncludeDirsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions15getDefinesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetDefinesCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions17getUndefinesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetUndefinesCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions25getSupportedStdTypesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetSupportedStdTypesCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppParserOptions34getSupportedFunctionTemplatesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetSupportedFunctionTemplatesCount(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.CppParserOptions> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.CppParserOptions>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.CppParserOptions managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.CppParserOptions managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static CppParserOptions __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new CppParserOptions(native.ToPointer(), skipVTables);
            }

            internal static CppParserOptions __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (CppParserOptions)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static CppParserOptions __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new CppParserOptions(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                global::CppSharp.Parser.CppParserOptions.__Internal.cctor(ret, new __IntPtr(&native));
                return ret.ToPointer();
            }

            private CppParserOptions(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected CppParserOptions(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public CppParserOptions()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.CppParserOptions.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public CppParserOptions(global::CppSharp.Parser.CppParserOptions _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.CppParserOptions.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                if (ReferenceEquals(_0, null))
                    throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = _0.__Instance;
                __Internal.cctor(__Instance, __arg0);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (callNativeDtor)
                    __Internal.dtor(__Instance);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public string GetArguments(uint i)
            {
                var ___ret = __Internal.GetArguments(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddArguments(string s)
            {
                __Internal.AddArguments(__Instance, s);
            }

            public void ClearArguments()
            {
                __Internal.ClearArguments(__Instance);
            }

            public string GetCompilationOptions(uint i)
            {
                var ___ret = __Internal.GetCompilationOptions(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddCompilationOptions(string s)
            {
                __Internal.AddCompilationOptions(__Instance, s);
            }

            public void ClearCompilationOptions()
            {
                __Internal.ClearCompilationOptions(__Instance);
            }

            public string GetSourceFiles(uint i)
            {
                var ___ret = __Internal.GetSourceFiles(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddSourceFiles(string s)
            {
                __Internal.AddSourceFiles(__Instance, s);
            }

            public void ClearSourceFiles()
            {
                __Internal.ClearSourceFiles(__Instance);
            }

            public string GetIncludeDirs(uint i)
            {
                var ___ret = __Internal.GetIncludeDirs(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddIncludeDirs(string s)
            {
                __Internal.AddIncludeDirs(__Instance, s);
            }

            public void ClearIncludeDirs()
            {
                __Internal.ClearIncludeDirs(__Instance);
            }

            public string GetSystemIncludeDirs(uint i)
            {
                var ___ret = __Internal.GetSystemIncludeDirs(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddSystemIncludeDirs(string s)
            {
                __Internal.AddSystemIncludeDirs(__Instance, s);
            }

            public void ClearSystemIncludeDirs()
            {
                __Internal.ClearSystemIncludeDirs(__Instance);
            }

            public string GetDefines(uint i)
            {
                var ___ret = __Internal.GetDefines(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddDefines(string s)
            {
                __Internal.AddDefines(__Instance, s);
            }

            public void ClearDefines()
            {
                __Internal.ClearDefines(__Instance);
            }

            public string GetUndefines(uint i)
            {
                var ___ret = __Internal.GetUndefines(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddUndefines(string s)
            {
                __Internal.AddUndefines(__Instance, s);
            }

            public void ClearUndefines()
            {
                __Internal.ClearUndefines(__Instance);
            }

            public string GetSupportedStdTypes(uint i)
            {
                var ___ret = __Internal.GetSupportedStdTypes(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddSupportedStdTypes(string s)
            {
                __Internal.AddSupportedStdTypes(__Instance, s);
            }

            public void ClearSupportedStdTypes()
            {
                __Internal.ClearSupportedStdTypes(__Instance);
            }

            public string GetSupportedFunctionTemplates(uint i)
            {
                var ___ret = __Internal.GetSupportedFunctionTemplates(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddSupportedFunctionTemplates(string s)
            {
                __Internal.AddSupportedFunctionTemplates(__Instance, s);
            }

            public void ClearSupportedFunctionTemplates()
            {
                __Internal.ClearSupportedFunctionTemplates(__Instance);
            }

            public global::CppSharp.Parser.AST.ASTContext ASTContext
            {
                get
                {
                    var __result0 = global::CppSharp.Parser.AST.ASTContext.__GetOrCreateInstance(((__Internal*)__Instance)->ASTContext, false);
                    return __result0;
                }

                set
                {
                    ((__Internal*)__Instance)->ASTContext = value is null ? __IntPtr.Zero : value.__Instance;
                }
            }

            public int ToolSetToUse
            {
                get
                {
                    return ((__Internal*)__Instance)->toolSetToUse;
                }

                set
                {
                    ((__Internal*)__Instance)->toolSetToUse = value;
                }
            }

            public string TargetTriple
            {
                get
                {
                    var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->targetTriple));
                    return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                }

                set
                {
                    global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->targetTriple), value);
                }
            }

            public bool NoStandardIncludes
            {
                get
                {
                    return ((__Internal*)__Instance)->noStandardIncludes != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->noStandardIncludes = (byte) (value ? 1 : 0);
                }
            }

            public bool NoBuiltinIncludes
            {
                get
                {
                    return ((__Internal*)__Instance)->noBuiltinIncludes != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->noBuiltinIncludes = (byte) (value ? 1 : 0);
                }
            }

            public bool MicrosoftMode
            {
                get
                {
                    return ((__Internal*)__Instance)->microsoftMode != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->microsoftMode = (byte) (value ? 1 : 0);
                }
            }

            public bool Verbose
            {
                get
                {
                    return ((__Internal*)__Instance)->verbose != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->verbose = (byte) (value ? 1 : 0);
                }
            }

            public bool UnityBuild
            {
                get
                {
                    return ((__Internal*)__Instance)->unityBuild != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->unityBuild = (byte) (value ? 1 : 0);
                }
            }

            public bool SkipPrivateDeclarations
            {
                get
                {
                    return ((__Internal*)__Instance)->skipPrivateDeclarations != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
                }
            }

            public bool SkipLayoutInfo
            {
                get
                {
                    return ((__Internal*)__Instance)->skipLayoutInfo != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->skipLayoutInfo = (byte) (value ? 1 : 0);
                }
            }

            public bool SkipFunctionBodies
            {
                get
                {
                    return ((__Internal*)__Instance)->skipFunctionBodies != 0;
                }

                set
                {
                    ((__Internal*)__Instance)->skipFunctionBodies = (byte) (value ? 1 : 0);
                }
            }

            public string ClangVersion
            {
                get
                {
                    var ___ret = new global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C();
                    __Internal.GetClangVersion(new IntPtr(&___ret), __Instance);
                    var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&___ret));
                    var __retString0 = global::Std.BasicStringExtensions.Data(__basicStringRet0);
                    __basicStringRet0.Dispose();
                    return __retString0;
                }
            }

            public uint ArgumentsCount
            {
                get
                {
                    var ___ret = __Internal.GetArgumentsCount(__Instance);
                    return ___ret;
                }
            }

            public uint CompilationOptionsCount
            {
                get
                {
                    var ___ret = __Internal.GetCompilationOptionsCount(__Instance);
                    return ___ret;
                }
            }

            public uint SourceFilesCount
            {
                get
                {
                    var ___ret = __Internal.GetSourceFilesCount(__Instance);
                    return ___ret;
                }
            }

            public uint IncludeDirsCount
            {
                get
                {
                    var ___ret = __Internal.GetIncludeDirsCount(__Instance);
                    return ___ret;
                }
            }

            public uint SystemIncludeDirsCount
            {
                get
                {
                    var ___ret = __Internal.GetSystemIncludeDirsCount(__Instance);
                    return ___ret;
                }
            }

            public uint DefinesCount
            {
                get
                {
                    var ___ret = __Internal.GetDefinesCount(__Instance);
                    return ___ret;
                }
            }

            public uint UndefinesCount
            {
                get
                {
                    var ___ret = __Internal.GetUndefinesCount(__Instance);
                    return ___ret;
                }
            }

            public uint SupportedStdTypesCount
            {
                get
                {
                    var ___ret = __Internal.GetSupportedStdTypesCount(__Instance);
                    return ___ret;
                }
            }

            public uint SupportedFunctionTemplatesCount
            {
                get
                {
                    var ___ret = __Internal.GetSupportedFunctionTemplatesCount(__Instance);
                    return ___ret;
                }
            }
        }

        public unsafe partial class CppLinkerOptions : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 72)]
            public partial struct __Internal
            {
                internal global::Std.Vector.__Internal Arguments;
                internal global::Std.Vector.__Internal LibraryDirs;
                internal global::Std.Vector.__Internal Libraries;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptionsC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptionsC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptionsD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void dtor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions12getArgumentsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetArguments(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions12addArgumentsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddArguments(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions14clearArgumentsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearArguments(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions14getLibraryDirsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetLibraryDirs(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions14addLibraryDirsEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddLibraryDirs(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions16clearLibraryDirsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearLibraryDirs(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions12getLibrariesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetLibraries(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions12addLibrariesEPKc", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddLibraries(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions14clearLibrariesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearLibraries(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions17getArgumentsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetArgumentsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions19getLibraryDirsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetLibraryDirsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16CppLinkerOptions17getLibrariesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetLibrariesCount(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.CppLinkerOptions> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.CppLinkerOptions>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.CppLinkerOptions managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.CppLinkerOptions managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static CppLinkerOptions __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new CppLinkerOptions(native.ToPointer(), skipVTables);
            }

            internal static CppLinkerOptions __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (CppLinkerOptions)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static CppLinkerOptions __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new CppLinkerOptions(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                global::CppSharp.Parser.CppLinkerOptions.__Internal.cctor(ret, new __IntPtr(&native));
                return ret.ToPointer();
            }

            private CppLinkerOptions(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected CppLinkerOptions(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public CppLinkerOptions()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.CppLinkerOptions.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public CppLinkerOptions(global::CppSharp.Parser.CppLinkerOptions _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.CppLinkerOptions.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                if (ReferenceEquals(_0, null))
                    throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = _0.__Instance;
                __Internal.cctor(__Instance, __arg0);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (callNativeDtor)
                    __Internal.dtor(__Instance);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public string GetArguments(uint i)
            {
                var ___ret = __Internal.GetArguments(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddArguments(string s)
            {
                __Internal.AddArguments(__Instance, s);
            }

            public void ClearArguments()
            {
                __Internal.ClearArguments(__Instance);
            }

            public string GetLibraryDirs(uint i)
            {
                var ___ret = __Internal.GetLibraryDirs(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddLibraryDirs(string s)
            {
                __Internal.AddLibraryDirs(__Instance, s);
            }

            public void ClearLibraryDirs()
            {
                __Internal.ClearLibraryDirs(__Instance);
            }

            public string GetLibraries(uint i)
            {
                var ___ret = __Internal.GetLibraries(__Instance, i);
                return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
            }

            public void AddLibraries(string s)
            {
                __Internal.AddLibraries(__Instance, s);
            }

            public void ClearLibraries()
            {
                __Internal.ClearLibraries(__Instance);
            }

            public uint ArgumentsCount
            {
                get
                {
                    var ___ret = __Internal.GetArgumentsCount(__Instance);
                    return ___ret;
                }
            }

            public uint LibraryDirsCount
            {
                get
                {
                    var ___ret = __Internal.GetLibraryDirsCount(__Instance);
                    return ___ret;
                }
            }

            public uint LibrariesCount
            {
                get
                {
                    var ___ret = __Internal.GetLibrariesCount(__Instance);
                    return ___ret;
                }
            }
        }

        public unsafe partial class ParserDiagnostic : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 80)]
            public partial struct __Internal
            {
                internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C fileName;
                internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C message;
                internal global::CppSharp.Parser.ParserDiagnosticLevel level;
                internal int lineNumber;
                internal int columnNumber;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserDiagnosticC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserDiagnosticC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser16ParserDiagnosticD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void dtor(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserDiagnostic> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserDiagnostic>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.ParserDiagnostic managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.ParserDiagnostic managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static ParserDiagnostic __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new ParserDiagnostic(native.ToPointer(), skipVTables);
            }

            internal static ParserDiagnostic __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (ParserDiagnostic)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static ParserDiagnostic __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new ParserDiagnostic(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                global::CppSharp.Parser.ParserDiagnostic.__Internal.cctor(ret, new __IntPtr(&native));
                return ret.ToPointer();
            }

            private ParserDiagnostic(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected ParserDiagnostic(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public ParserDiagnostic()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserDiagnostic.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public ParserDiagnostic(global::CppSharp.Parser.ParserDiagnostic _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserDiagnostic.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                if (ReferenceEquals(_0, null))
                    throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = _0.__Instance;
                __Internal.cctor(__Instance, __arg0);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (callNativeDtor)
                    __Internal.dtor(__Instance);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public string FileName
            {
                get
                {
                    var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->fileName));
                    return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                }

                set
                {
                    global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->fileName), value);
                }
            }

            public string Message
            {
                get
                {
                    var __basicStringRet0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->message));
                    return global::Std.BasicStringExtensions.Data(__basicStringRet0);
                }

                set
                {
                    global::Std.BasicStringExtensions.__Internal.Assign(new __IntPtr(&((__Internal*)__Instance)->message), value);
                }
            }

            public global::CppSharp.Parser.ParserDiagnosticLevel Level
            {
                get
                {
                    return ((__Internal*)__Instance)->level;
                }

                set
                {
                    ((__Internal*)__Instance)->level = value;
                }
            }

            public int LineNumber
            {
                get
                {
                    return ((__Internal*)__Instance)->lineNumber;
                }

                set
                {
                    ((__Internal*)__Instance)->lineNumber = value;
                }
            }

            public int ColumnNumber
            {
                get
                {
                    return ((__Internal*)__Instance)->columnNumber;
                }

                set
                {
                    ((__Internal*)__Instance)->columnNumber = value;
                }
            }
        }

        public unsafe partial class ParserResult : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 64)]
            public partial struct __Internal
            {
                internal global::CppSharp.Parser.ParserResultKind kind;
                internal global::Std.Vector.__Internal Diagnostics;
                internal global::Std.Vector.__Internal Libraries;
                internal __IntPtr targetInfo;

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResultC2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ctor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResultC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResultD2Ev", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void dtor(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult14getDiagnosticsEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void GetDiagnostics(__IntPtr @return, __IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult14addDiagnosticsERNS0_16ParserDiagnosticE", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddDiagnostics(__IntPtr __instance, __IntPtr s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult16clearDiagnosticsEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearDiagnostics(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult12getLibrariesEj", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr GetLibraries(__IntPtr __instance, uint i);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult12addLibrariesERPNS0_3AST13NativeLibraryE", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void AddLibraries(__IntPtr __instance, __IntPtr s);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult14clearLibrariesEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void ClearLibraries(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult19getDiagnosticsCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetDiagnosticsCount(__IntPtr __instance);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser12ParserResult17getLibrariesCountEv", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern uint GetLibrariesCount(__IntPtr __instance);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserResult> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ParserResult>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.ParserResult managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.ParserResult managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static ParserResult __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new ParserResult(native.ToPointer(), skipVTables);
            }

            internal static ParserResult __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (ParserResult)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static ParserResult __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new ParserResult(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                global::CppSharp.Parser.ParserResult.__Internal.cctor(ret, new __IntPtr(&native));
                return ret.ToPointer();
            }

            private ParserResult(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected ParserResult(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public ParserResult()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserResult.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                __Internal.ctor(__Instance);
            }

            public ParserResult(global::CppSharp.Parser.ParserResult _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ParserResult.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                if (ReferenceEquals(_0, null))
                    throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = _0.__Instance;
                __Internal.cctor(__Instance, __arg0);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (callNativeDtor)
                    __Internal.dtor(__Instance);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public global::CppSharp.Parser.ParserDiagnostic GetDiagnostics(uint i)
            {
                var ___ret = new global::CppSharp.Parser.ParserDiagnostic.__Internal();
                __Internal.GetDiagnostics(new IntPtr(&___ret), __Instance, i);
                var _____ret = global::CppSharp.Parser.ParserDiagnostic.__CreateInstance(___ret);
                global::CppSharp.Parser.ParserDiagnostic.__Internal.dtor(new __IntPtr(&___ret));
                return _____ret;
            }

            public void AddDiagnostics(global::CppSharp.Parser.ParserDiagnostic s)
            {
                if (ReferenceEquals(s, null))
                    throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                var __arg0 = s.__Instance;
                __Internal.AddDiagnostics(__Instance, __arg0);
            }

            public void ClearDiagnostics()
            {
                __Internal.ClearDiagnostics(__Instance);
            }

            public global::CppSharp.Parser.AST.NativeLibrary GetLibraries(uint i)
            {
                var ___ret = __Internal.GetLibraries(__Instance, i);
                var __result0 = global::CppSharp.Parser.AST.NativeLibrary.__GetOrCreateInstance(___ret, false);
                return __result0;
            }

            public void AddLibraries(global::CppSharp.Parser.AST.NativeLibrary s)
            {
                if (ReferenceEquals(s, null))
                    throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
                var ____arg0 = s.__Instance;
                var __arg0 = new __IntPtr(&____arg0);
                __Internal.AddLibraries(__Instance, __arg0);
            }

            public void ClearLibraries()
            {
                __Internal.ClearLibraries(__Instance);
            }

            public global::CppSharp.Parser.ParserResultKind Kind
            {
                get
                {
                    return ((__Internal*)__Instance)->kind;
                }

                set
                {
                    ((__Internal*)__Instance)->kind = value;
                }
            }

            public global::CppSharp.Parser.ParserTargetInfo TargetInfo
            {
                get
                {
                    var __result0 = global::CppSharp.Parser.ParserTargetInfo.__GetOrCreateInstance(((__Internal*)__Instance)->targetInfo, false);
                    return __result0;
                }

                set
                {
                    ((__Internal*)__Instance)->targetInfo = value is null ? __IntPtr.Zero : value.__Instance;
                }
            }

            public uint DiagnosticsCount
            {
                get
                {
                    var ___ret = __Internal.GetDiagnosticsCount(__Instance);
                    return ___ret;
                }
            }

            public uint LibrariesCount
            {
                get
                {
                    var ___ret = __Internal.GetLibrariesCount(__Instance);
                    return ___ret;
                }
            }
        }

        public unsafe partial class ClangParser : IDisposable
        {
            [StructLayout(LayoutKind.Sequential, Size = 1)]
            public partial struct __Internal
            {
                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParserC2ERKS1_", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern void cctor(__IntPtr __instance, __IntPtr _0);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParser11ParseHeaderEPNS0_16CppParserOptionsE", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr ParseHeader(__IntPtr Opts);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppLinkerOptionsE", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr ParseLibrary(__IntPtr Opts);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParser5BuildEPNS0_16CppParserOptionsEPKNS0_16CppLinkerOptionsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr Build(__IntPtr Opts, __IntPtr LinkerOptions, __IntPtr File, bool Last);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParser7CompileEPNS0_16CppParserOptionsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr Compile(__IntPtr Opts, __IntPtr File);

                [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser11ClangParser4LinkEPNS0_16CppParserOptionsEPKNS0_16CppLinkerOptionsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb", CallingConvention = __CallingConvention.Cdecl)]
                internal static extern __IntPtr Link(__IntPtr Opts, __IntPtr LinkerOptions, __IntPtr File, bool Last);
            }

            public __IntPtr __Instance { get; protected set; }

            internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ClangParser> NativeToManagedMap =
                new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::CppSharp.Parser.ClangParser>();

            internal static void __RecordNativeToManagedMapping(IntPtr native, global::CppSharp.Parser.ClangParser managed)
            {
                NativeToManagedMap[native] = managed;
            }

            internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::CppSharp.Parser.ClangParser managed)
            {
    
                return NativeToManagedMap.TryGetValue(native, out managed);
            }

            protected bool __ownsNativeInstance;

            internal static ClangParser __CreateInstance(__IntPtr native, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                return new ClangParser(native.ToPointer(), skipVTables);
            }

            internal static ClangParser __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
            {
                if (native == __IntPtr.Zero)
                    return null;
                if (__TryGetNativeToManagedMapping(native, out var managed))
                    return (ClangParser)managed;
                var result = __CreateInstance(native, skipVTables);
                if (saveInstance)
                    __RecordNativeToManagedMapping(native, result);
                return result;
            }

            internal static ClangParser __CreateInstance(__Internal native, bool skipVTables = false)
            {
                return new ClangParser(native, skipVTables);
            }

            private static void* __CopyValue(__Internal native)
            {
                var ret = Marshal.AllocHGlobal(sizeof(__Internal));
                *(__Internal*) ret = native;
                return ret.ToPointer();
            }

            private ClangParser(__Internal native, bool skipVTables = false)
                : this(__CopyValue(native), skipVTables)
            {
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            protected ClangParser(void* native, bool skipVTables = false)
            {
                if (native == null)
                    return;
                __Instance = new __IntPtr(native);
            }

            public ClangParser()
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ClangParser.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
            }

            public ClangParser(global::CppSharp.Parser.ClangParser _0)
            {
                __Instance = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.ClangParser.__Internal));
                __ownsNativeInstance = true;
                __RecordNativeToManagedMapping(__Instance, this);
                *((global::CppSharp.Parser.ClangParser.__Internal*) __Instance) = *((global::CppSharp.Parser.ClangParser.__Internal*) _0.__Instance);
            }

            public void Dispose()
            {
                Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
            }

            partial void DisposePartial(bool disposing);

            internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
            {
                if (__Instance == IntPtr.Zero)
                    return;
                NativeToManagedMap.TryRemove(__Instance, out _);
                DisposePartial(disposing);
                if (__ownsNativeInstance)
                    Marshal.FreeHGlobal(__Instance);
                __Instance = IntPtr.Zero;
            }

            public static global::CppSharp.Parser.ParserResult ParseHeader(global::CppSharp.Parser.CppParserOptions Opts)
            {
                var __arg0 = Opts is null ? __IntPtr.Zero : Opts.__Instance;
                var ___ret = __Internal.ParseHeader(__arg0);
                var __result0 = global::CppSharp.Parser.ParserResult.__GetOrCreateInstance(___ret, false);
                return __result0;
            }

            public static global::CppSharp.Parser.ParserResult ParseLibrary(global::CppSharp.Parser.CppLinkerOptions Opts)
            {
                var __arg0 = Opts is null ? __IntPtr.Zero : Opts.__Instance;
                var ___ret = __Internal.ParseLibrary(__arg0);
                var __result0 = global::CppSharp.Parser.ParserResult.__GetOrCreateInstance(___ret, false);
                return __result0;
            }

            public static global::CppSharp.Parser.ParserResult Build(global::CppSharp.Parser.CppParserOptions Opts, global::CppSharp.Parser.CppLinkerOptions LinkerOptions, string File, bool Last)
            {
                var __arg0 = Opts is null ? __IntPtr.Zero : Opts.__Instance;
                var __arg1 = LinkerOptions is null ? __IntPtr.Zero : LinkerOptions.__Instance;
                var __basicString2 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                global::Std.BasicStringExtensions.Assign(__basicString2, File);
                var __arg2 = __basicString2.__Instance;
                var ___ret = __Internal.Build(__arg0, __arg1, __arg2, Last);
                __basicString2.Dispose();
                var __result0 = global::CppSharp.Parser.ParserResult.__GetOrCreateInstance(___ret, false);
                return __result0;
            }

            public static global::CppSharp.Parser.ParserResult Compile(global::CppSharp.Parser.CppParserOptions Opts, string File)
            {
                var __arg0 = Opts is null ? __IntPtr.Zero : Opts.__Instance;
                var __basicString1 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                global::Std.BasicStringExtensions.Assign(__basicString1, File);
                var __arg1 = __basicString1.__Instance;
                var ___ret = __Internal.Compile(__arg0, __arg1);
                __basicString1.Dispose();
                var __result0 = global::CppSharp.Parser.ParserResult.__GetOrCreateInstance(___ret, false);
                return __result0;
            }

            public static global::CppSharp.Parser.ParserResult Link(global::CppSharp.Parser.CppParserOptions Opts, global::CppSharp.Parser.CppLinkerOptions LinkerOptions, string File, bool Last)
            {
                var __arg0 = Opts is null ? __IntPtr.Zero : Opts.__Instance;
                var __arg1 = LinkerOptions is null ? __IntPtr.Zero : LinkerOptions.__Instance;
                var __basicString2 = new global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>();
                global::Std.BasicStringExtensions.Assign(__basicString2, File);
                var __arg2 = __basicString2.__Instance;
                var ___ret = __Internal.Link(__arg0, __arg1, __arg2, Last);
                __basicString2.Dispose();
                var __result0 = global::CppSharp.Parser.ParserResult.__GetOrCreateInstance(___ret, false);
                return __result0;
            }
        }
    }
}

namespace Std
{
    namespace RbTree
    {
        namespace RbTreeImpl
        {
            [StructLayout(LayoutKind.Sequential, Size = 48)]
            public unsafe partial struct __Internalc__N_std_S__Rb_tree____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C___N_std_S_pair__1S0_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S__Select1st__S3____N_std_S_less__S0____N_std_S_allocator__S3__S__Rb_tree_impl__S7__Vb1
            {
                internal global::Std.Less.__Internal _M_key_compare;
                internal global::Std.RbTreeNodeBase.__Internal _M_header;
                internal ulong _M_node_count;
            }
        }

        [StructLayout(LayoutKind.Sequential, Size = 48)]
        public unsafe partial struct __Internalc__N_std_S__Rb_tree____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C___N_std_S_pair__1S0_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S__Select1st__S3____N_std_S_less__S0____N_std_S_allocator__S3_
        {
            internal global::Std.RbTree.RbTreeImpl.__Internalc__N_std_S__Rb_tree____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C___N_std_S_pair__1S0_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S__Select1st__S3____N_std_S_less__S0____N_std_S_allocator__S3__S__Rb_tree_impl__S7__Vb1 _M_impl;
        }
    }

}
namespace Std
{
    namespace Map
    {
        [StructLayout(LayoutKind.Sequential, Size = 48)]
        public unsafe partial struct __Internalc__N_std_S_map____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_less__S0____N_std_S_allocator____N_std_S_pair__1S0__S3_
        {
            internal global::Std.RbTree.__Internalc__N_std_S__Rb_tree____N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C___N_std_S_pair__1S0_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S__Select1st__S3____N_std_S_less__S0____N_std_S_allocator__S3_ _M_t;
        }
    }
}