diff --git a/src/AST/ASTVisitor.cs b/src/AST/ASTVisitor.cs
index 1be62467..f60041f6 100644
--- a/src/AST/ASTVisitor.cs
+++ b/src/AST/ASTVisitor.cs
@@ -372,6 +372,17 @@ namespace CppSharp.AST
return true;
}
+ public virtual bool VisitTypeAliasTemplateDecl(TypeAliasTemplate template)
+ {
+ if (!VisitDeclaration(template))
+ return false;
+
+ foreach (var templateParameter in template.Parameters)
+ templateParameter.Visit(this);
+
+ return true;
+ }
+
public virtual bool VisitClassTemplateDecl(ClassTemplate template)
{
if (!VisitDeclaration(template))
diff --git a/src/AST/Declaration.cs b/src/AST/Declaration.cs
index e810ee02..f9014ce1 100644
--- a/src/AST/Declaration.cs
+++ b/src/AST/Declaration.cs
@@ -389,5 +389,6 @@ namespace CppSharp.AST
T VisitTemplateTemplateParameterDecl(TemplateTemplateParameter templateTemplateParameter);
T VisitTemplateParameterDecl(TypeTemplateParameter templateParameter);
T VisitNonTypeTemplateParameterDecl(NonTypeTemplateParameter nonTypeTemplateParameter);
+ T VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate);
}
}
diff --git a/src/AST/Template.cs b/src/AST/Template.cs
index 9b036326..a2dbb0c0 100644
--- a/src/AST/Template.cs
+++ b/src/AST/Template.cs
@@ -174,6 +174,17 @@ namespace CppSharp.AST
}
}
+ ///
+ /// Declaration of a type alias template.
+ ///
+ public class TypeAliasTemplate : Template
+ {
+ public override T Visit(IDeclVisitor visitor)
+ {
+ return visitor.VisitTypeAliasTemplateDecl(this);
+ }
+ }
+
///
/// Declaration of a class template.
///
diff --git a/src/Core/Parser/ASTConverter.cs b/src/Core/Parser/ASTConverter.cs
index 260767ed..2a35f9ca 100644
--- a/src/Core/Parser/ASTConverter.cs
+++ b/src/Core/Parser/ASTConverter.cs
@@ -133,6 +133,7 @@ namespace CppSharp
public abstract TRet VisitField(Field decl);
public abstract TRet VisitAccessSpecifier(AccessSpecifierDecl decl);
public abstract TRet VisitClass(Class decl);
+ public abstract TRet VisitTypeAliasTemplate(TypeAliasTemplate decl);
public abstract TRet VisitClassTemplate(ClassTemplate decl);
public abstract TRet VisitClassTemplateSpecialization(
ClassTemplateSpecialization decl);
@@ -232,6 +233,11 @@ namespace CppSharp
var _decl = FunctionTemplate.__CreateInstance(decl.__Instance);
return VisitFunctionTemplate(_decl);
}
+ case DeclarationKind.TypeAliasTemplate:
+ {
+ var _decl = TypeAliasTemplate.__CreateInstance(decl.__Instance);
+ return VisitTypeAliasTemplate(_decl);
+ }
case DeclarationKind.TemplateTemplateParm:
{
var _decl = TemplateTemplateParameter.__CreateInstance(decl.__Instance);
@@ -1469,6 +1475,14 @@ namespace CppSharp
}
}
+ public override AST.Declaration VisitTypeAliasTemplate(TypeAliasTemplate decl)
+ {
+ var _decl = new AST.TypeAliasTemplate();
+ VisitTemplate(decl, _decl);
+
+ return _decl;
+ }
+
public override AST.Declaration VisitClassTemplate(ClassTemplate decl)
{
var _decl = new AST.ClassTemplate();
diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp
index 570670fc..9f28e650 100644
--- a/src/CppParser/AST.cpp
+++ b/src/CppParser/AST.cpp
@@ -84,8 +84,6 @@ AttributedType::AttributedType() : Type(TypeKind::Attributed) {}
DecayedType::DecayedType() : Type(TypeKind::Decayed) {}
// Template
-Template::Template(DeclarationKind kind) : Declaration(kind) {}
-
TemplateParameter::TemplateParameter(DeclarationKind kind)
: Declaration(kind)
, Depth(0)
@@ -460,7 +458,7 @@ Function* DeclarationContext::FindFunction(const std::string& USR)
return *foundFunction;
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
- [&](Template* t) { return t->TemplatedDecl->USR == USR; });
+ [&](Template* t) { return t->TemplatedDecl && t->TemplatedDecl->USR == USR; });
if (foundTemplate != Templates.end())
return static_cast((*foundTemplate)->TemplatedDecl);
@@ -480,6 +478,19 @@ DeclarationContext::FindClassTemplate(const std::string& USR)
return nullptr;
}
+TypeAliasTemplate*
+DeclarationContext::FindTypeAliasTemplate(const std::string& USR)
+{
+ auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
+ [&](Template* t) { return t->USR == USR; }
+ );
+
+ if (foundTemplate != Templates.end())
+ return static_cast(*foundTemplate);
+
+ return nullptr;
+}
+
FunctionTemplate*
DeclarationContext::FindFunctionTemplate(const std::string& USR)
{
@@ -712,8 +723,14 @@ DEF_VECTOR(Class, AccessSpecifierDecl*, Specifiers)
Template::Template() : Declaration(DeclarationKind::Template),
TemplatedDecl(0) {}
+Template::Template(DeclarationKind kind) : Declaration(kind), TemplatedDecl(0) {}
+
DEF_VECTOR(Template, Declaration*, Parameters)
+TypeAliasTemplate::TypeAliasTemplate() : Template(DeclarationKind::TypeAliasTemplate) {}
+
+TypeAliasTemplate::~TypeAliasTemplate() {}
+
ClassTemplate::ClassTemplate() : Template(DeclarationKind::ClassTemplate) {}
ClassTemplate::~ClassTemplate() {}
diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h
index a270286f..7a975311 100644
--- a/src/CppParser/AST.h
+++ b/src/CppParser/AST.h
@@ -372,6 +372,7 @@ enum class DeclarationKind
AccessSpecifier,
Class,
Template,
+ TypeAliasTemplate,
ClassTemplate,
ClassTemplateSpecialization,
ClassTemplatePartialSpecialization,
@@ -433,6 +434,7 @@ class Function;
class TypedefDecl;
class Namespace;
class Template;
+class TypeAliasTemplate;
class ClassTemplate;
class FunctionTemplate;
class Variable;
@@ -454,6 +456,7 @@ public:
CS_IGNORE Class* FindClass(const std::string& Name, bool IsComplete,
bool Create);
+ CS_IGNORE TypeAliasTemplate* FindTypeAliasTemplate(const std::string& USR);
CS_IGNORE ClassTemplate* FindClassTemplate(const std::string& USR);
CS_IGNORE FunctionTemplate* FindFunctionTemplate(const std::string& USR);
@@ -777,6 +780,13 @@ public:
VECTOR(Declaration*, Parameters)
};
+class CS_API TypeAliasTemplate : public Template
+{
+public:
+ TypeAliasTemplate();
+ ~TypeAliasTemplate();
+};
+
class CS_API TemplateParameter : public Declaration
{
public:
diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp
index f9a92679..59163b0a 100644
--- a/src/CppParser/Bindings/CLI/AST.cpp
+++ b/src/CppParser/Bindings/CLI/AST.cpp
@@ -3651,6 +3651,43 @@ void CppSharp::Parser::AST::Template::TemplatedDecl::set(CppSharp::Parser::AST::
((::CppSharp::CppParser::AST::Template*)NativePtr)->TemplatedDecl = (::CppSharp::CppParser::AST::Declaration*)value->NativePtr;
}
+CppSharp::Parser::AST::TypeAliasTemplate::TypeAliasTemplate(::CppSharp::CppParser::AST::TypeAliasTemplate* native)
+ : CppSharp::Parser::AST::Template((::CppSharp::CppParser::AST::Template*)native)
+{
+}
+
+CppSharp::Parser::AST::TypeAliasTemplate^ CppSharp::Parser::AST::TypeAliasTemplate::__CreateInstance(::System::IntPtr native)
+{
+ return gcnew ::CppSharp::Parser::AST::TypeAliasTemplate((::CppSharp::CppParser::AST::TypeAliasTemplate*) native.ToPointer());
+}
+
+CppSharp::Parser::AST::TypeAliasTemplate::~TypeAliasTemplate()
+{
+ if (NativePtr)
+ {
+ auto __nativePtr = NativePtr;
+ NativePtr = 0;
+ delete (::CppSharp::CppParser::AST::TypeAliasTemplate*) __nativePtr;
+ }
+}
+
+CppSharp::Parser::AST::TypeAliasTemplate::TypeAliasTemplate()
+ : CppSharp::Parser::AST::Template((::CppSharp::CppParser::AST::Template*)nullptr)
+{
+ __ownsNativeInstance = true;
+ NativePtr = new ::CppSharp::CppParser::AST::TypeAliasTemplate();
+}
+
+CppSharp::Parser::AST::TypeAliasTemplate::TypeAliasTemplate(CppSharp::Parser::AST::TypeAliasTemplate^ _0)
+ : CppSharp::Parser::AST::Template((::CppSharp::CppParser::AST::Template*)nullptr)
+{
+ __ownsNativeInstance = true;
+ if (ReferenceEquals(_0, nullptr))
+ throw gcnew ::System::ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
+ auto &__arg0 = *(::CppSharp::CppParser::AST::TypeAliasTemplate*)_0->NativePtr;
+ NativePtr = new ::CppSharp::CppParser::AST::TypeAliasTemplate(__arg0);
+}
+
CppSharp::Parser::AST::TemplateParameter::TemplateParameter(::CppSharp::CppParser::AST::TemplateParameter* native)
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native)
{
diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h
index a9eba5cf..fb6e6863 100644
--- a/src/CppParser/Bindings/CLI/AST.h
+++ b/src/CppParser/Bindings/CLI/AST.h
@@ -91,6 +91,7 @@ namespace CppSharp
ref class TextComment;
ref class TranslationUnit;
ref class Type;
+ ref class TypeAliasTemplate;
ref class TypeQualifiers;
ref class TypeTemplateParameter;
ref class TypedefDecl;
@@ -145,19 +146,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
};
public enum struct AccessSpecifier
@@ -2170,6 +2172,19 @@ namespace CppSharp
void clearParameters();
};
+ public ref class TypeAliasTemplate : CppSharp::Parser::AST::Template
+ {
+ public:
+
+ TypeAliasTemplate(::CppSharp::CppParser::AST::TypeAliasTemplate* native);
+ static TypeAliasTemplate^ __CreateInstance(::System::IntPtr native);
+ TypeAliasTemplate();
+
+ TypeAliasTemplate(CppSharp::Parser::AST::TypeAliasTemplate^ _0);
+
+ ~TypeAliasTemplate();
+ };
+
public ref class TemplateParameter : CppSharp::Parser::AST::Declaration
{
public:
diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
index 988ff940..7e3e22cf 100644
--- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
+++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
@@ -47,19 +47,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
}
public enum AccessSpecifier
@@ -8269,6 +8270,133 @@ namespace CppSharp
}
}
+ public unsafe partial class TypeAliasTemplate : CppSharp.Parser.AST.Template, IDisposable
+ {
+ [StructLayout(LayoutKind.Explicit, Size = 108)]
+ public new partial struct Internal
+ {
+ [FieldOffset(0)]
+ public CppSharp.Parser.AST.DeclarationKind Kind;
+
+ [FieldOffset(4)]
+ public CppSharp.Parser.AST.AccessSpecifier Access;
+
+ [FieldOffset(8)]
+ public global::System.IntPtr _Namespace;
+
+ [FieldOffset(12)]
+ public CppSharp.Parser.SourceLocation.Internal Location;
+
+ [FieldOffset(16)]
+ public int LineNumberStart;
+
+ [FieldOffset(20)]
+ public int LineNumberEnd;
+
+ [FieldOffset(60)]
+ public byte IsIncomplete;
+
+ [FieldOffset(61)]
+ public byte IsDependent;
+
+ [FieldOffset(62)]
+ public byte IsImplicit;
+
+ [FieldOffset(64)]
+ public global::System.IntPtr CompleteDeclaration;
+
+ [FieldOffset(68)]
+ public uint DefinitionOrder;
+
+ [FieldOffset(84)]
+ public global::System.IntPtr OriginalPtr;
+
+ [FieldOffset(88)]
+ public global::System.IntPtr Comment;
+
+ [FieldOffset(92)]
+ public global::System.IntPtr TemplatedDecl;
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev")]
+ internal static extern void ctor_0(global::System.IntPtr instance);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2ERKS2_")]
+ internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateD2Ev")]
+ internal static extern void dtor_0(global::System.IntPtr instance);
+ }
+
+ public static new TypeAliasTemplate __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native.ToPointer(), skipVTables);
+ }
+
+ public static TypeAliasTemplate __CreateInstance(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native, skipVTables);
+ }
+
+ private static void* __CopyValue(TypeAliasTemplate.Internal native)
+ {
+ var ret = Marshal.AllocHGlobal(108);
+ CppSharp.Parser.AST.TypeAliasTemplate.Internal.cctor_1(ret, new global::System.IntPtr(&native));
+ return ret.ToPointer();
+ }
+
+ private TypeAliasTemplate(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ : this(__CopyValue(native), skipVTables)
+ {
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ }
+
+ protected TypeAliasTemplate(void* native, bool skipVTables = false)
+ : base((void*) null)
+ {
+ __PointerAdjustment = 0;
+ if (native == null)
+ return;
+ __Instance = new global::System.IntPtr(native);
+ }
+
+ public TypeAliasTemplate()
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(108);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ Internal.ctor_0((__Instance + __PointerAdjustment));
+ }
+
+ public TypeAliasTemplate(CppSharp.Parser.AST.TypeAliasTemplate _0)
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(108);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__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_1((__Instance + __PointerAdjustment), __arg0);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ CppSharp.Parser.AST.Declaration __dummy;
+ NativeToManagedMap.TryRemove(__Instance, out __dummy);
+ Internal.dtor_0((__Instance + __PointerAdjustment));
+ if (__ownsNativeInstance)
+ Marshal.FreeHGlobal(__Instance);
+ }
+ }
+
public unsafe partial class TemplateParameter : CppSharp.Parser.AST.Declaration, IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 104)]
diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
index 9cb1d92a..fa9d2c42 100644
--- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
+++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
@@ -47,19 +47,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
}
public enum AccessSpecifier
@@ -8269,6 +8270,133 @@ namespace CppSharp
}
}
+ public unsafe partial class TypeAliasTemplate : CppSharp.Parser.AST.Template, IDisposable
+ {
+ [StructLayout(LayoutKind.Explicit, Size = 144)]
+ public new partial struct Internal
+ {
+ [FieldOffset(0)]
+ public CppSharp.Parser.AST.DeclarationKind Kind;
+
+ [FieldOffset(4)]
+ public CppSharp.Parser.AST.AccessSpecifier Access;
+
+ [FieldOffset(8)]
+ public global::System.IntPtr _Namespace;
+
+ [FieldOffset(12)]
+ public CppSharp.Parser.SourceLocation.Internal Location;
+
+ [FieldOffset(16)]
+ public int LineNumberStart;
+
+ [FieldOffset(20)]
+ public int LineNumberEnd;
+
+ [FieldOffset(96)]
+ public byte IsIncomplete;
+
+ [FieldOffset(97)]
+ public byte IsDependent;
+
+ [FieldOffset(98)]
+ public byte IsImplicit;
+
+ [FieldOffset(100)]
+ public global::System.IntPtr CompleteDeclaration;
+
+ [FieldOffset(104)]
+ public uint DefinitionOrder;
+
+ [FieldOffset(120)]
+ public global::System.IntPtr OriginalPtr;
+
+ [FieldOffset(124)]
+ public global::System.IntPtr Comment;
+
+ [FieldOffset(128)]
+ public global::System.IntPtr TemplatedDecl;
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
+ EntryPoint="??0TypeAliasTemplate@AST@CppParser@CppSharp@@QAE@XZ")]
+ internal static extern global::System.IntPtr ctor_0(global::System.IntPtr instance);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
+ EntryPoint="??0TypeAliasTemplate@AST@CppParser@CppSharp@@QAE@ABV0123@@Z")]
+ internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
+ EntryPoint="??1TypeAliasTemplate@AST@CppParser@CppSharp@@QAE@XZ")]
+ internal static extern void dtor_0(global::System.IntPtr instance, int delete);
+ }
+
+ public static new TypeAliasTemplate __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native.ToPointer(), skipVTables);
+ }
+
+ public static TypeAliasTemplate __CreateInstance(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native, skipVTables);
+ }
+
+ private static void* __CopyValue(TypeAliasTemplate.Internal native)
+ {
+ var ret = Marshal.AllocHGlobal(144);
+ CppSharp.Parser.AST.TypeAliasTemplate.Internal.cctor_1(ret, new global::System.IntPtr(&native));
+ return ret.ToPointer();
+ }
+
+ private TypeAliasTemplate(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ : this(__CopyValue(native), skipVTables)
+ {
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ }
+
+ protected TypeAliasTemplate(void* native, bool skipVTables = false)
+ : base((void*) null)
+ {
+ __PointerAdjustment = 0;
+ if (native == null)
+ return;
+ __Instance = new global::System.IntPtr(native);
+ }
+
+ public TypeAliasTemplate()
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(144);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ Internal.ctor_0((__Instance + __PointerAdjustment));
+ }
+
+ public TypeAliasTemplate(CppSharp.Parser.AST.TypeAliasTemplate _0)
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(144);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__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_1((__Instance + __PointerAdjustment), __arg0);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ CppSharp.Parser.AST.Declaration __dummy;
+ NativeToManagedMap.TryRemove(__Instance, out __dummy);
+ Internal.dtor_0((__Instance + __PointerAdjustment), 0);
+ if (__ownsNativeInstance)
+ Marshal.FreeHGlobal(__Instance);
+ }
+ }
+
public unsafe partial class TemplateParameter : CppSharp.Parser.AST.Declaration, IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 140)]
diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs
index 01dd0133..29677430 100644
--- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs
+++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs
@@ -47,19 +47,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
}
public enum AccessSpecifier
@@ -8268,6 +8269,133 @@ namespace CppSharp
}
}
+ public unsafe partial class TypeAliasTemplate : CppSharp.Parser.AST.Template, IDisposable
+ {
+ [StructLayout(LayoutKind.Explicit, Size = 200)]
+ public new partial struct Internal
+ {
+ [FieldOffset(0)]
+ public CppSharp.Parser.AST.DeclarationKind Kind;
+
+ [FieldOffset(4)]
+ public CppSharp.Parser.AST.AccessSpecifier Access;
+
+ [FieldOffset(8)]
+ public global::System.IntPtr _Namespace;
+
+ [FieldOffset(16)]
+ public CppSharp.Parser.SourceLocation.Internal Location;
+
+ [FieldOffset(20)]
+ public int LineNumberStart;
+
+ [FieldOffset(24)]
+ public int LineNumberEnd;
+
+ [FieldOffset(104)]
+ public byte IsIncomplete;
+
+ [FieldOffset(105)]
+ public byte IsDependent;
+
+ [FieldOffset(106)]
+ public byte IsImplicit;
+
+ [FieldOffset(112)]
+ public global::System.IntPtr CompleteDeclaration;
+
+ [FieldOffset(120)]
+ public uint DefinitionOrder;
+
+ [FieldOffset(152)]
+ public global::System.IntPtr OriginalPtr;
+
+ [FieldOffset(160)]
+ public global::System.IntPtr Comment;
+
+ [FieldOffset(168)]
+ public global::System.IntPtr TemplatedDecl;
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev")]
+ internal static extern void ctor_0(global::System.IntPtr instance);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2ERKS2_")]
+ internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateD2Ev")]
+ internal static extern void dtor_0(global::System.IntPtr instance);
+ }
+
+ public static new TypeAliasTemplate __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native.ToPointer(), skipVTables);
+ }
+
+ public static TypeAliasTemplate __CreateInstance(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native, skipVTables);
+ }
+
+ private static void* __CopyValue(TypeAliasTemplate.Internal native)
+ {
+ var ret = Marshal.AllocHGlobal(200);
+ CppSharp.Parser.AST.TypeAliasTemplate.Internal.cctor_1(ret, new global::System.IntPtr(&native));
+ return ret.ToPointer();
+ }
+
+ private TypeAliasTemplate(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ : this(__CopyValue(native), skipVTables)
+ {
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ }
+
+ protected TypeAliasTemplate(void* native, bool skipVTables = false)
+ : base((void*) null)
+ {
+ __PointerAdjustment = 0;
+ if (native == null)
+ return;
+ __Instance = new global::System.IntPtr(native);
+ }
+
+ public TypeAliasTemplate()
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(200);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ Internal.ctor_0((__Instance + __PointerAdjustment));
+ }
+
+ public TypeAliasTemplate(CppSharp.Parser.AST.TypeAliasTemplate _0)
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(200);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__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_1((__Instance + __PointerAdjustment), __arg0);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ CppSharp.Parser.AST.Declaration __dummy;
+ NativeToManagedMap.TryRemove(__Instance, out __dummy);
+ Internal.dtor_0((__Instance + __PointerAdjustment));
+ if (__ownsNativeInstance)
+ Marshal.FreeHGlobal(__Instance);
+ }
+ }
+
public unsafe partial class TemplateParameter : CppSharp.Parser.AST.Declaration, IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 184)]
diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
index a4ec6cdf..53c3eb0e 100644
--- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
+++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
@@ -47,19 +47,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
}
public enum AccessSpecifier
@@ -8268,6 +8269,133 @@ namespace CppSharp
}
}
+ public unsafe partial class TypeAliasTemplate : CppSharp.Parser.AST.Template, IDisposable
+ {
+ [StructLayout(LayoutKind.Explicit, Size = 152)]
+ public new partial struct Internal
+ {
+ [FieldOffset(0)]
+ public CppSharp.Parser.AST.DeclarationKind Kind;
+
+ [FieldOffset(4)]
+ public CppSharp.Parser.AST.AccessSpecifier Access;
+
+ [FieldOffset(8)]
+ public global::System.IntPtr _Namespace;
+
+ [FieldOffset(16)]
+ public CppSharp.Parser.SourceLocation.Internal Location;
+
+ [FieldOffset(20)]
+ public int LineNumberStart;
+
+ [FieldOffset(24)]
+ public int LineNumberEnd;
+
+ [FieldOffset(56)]
+ public byte IsIncomplete;
+
+ [FieldOffset(57)]
+ public byte IsDependent;
+
+ [FieldOffset(58)]
+ public byte IsImplicit;
+
+ [FieldOffset(64)]
+ public global::System.IntPtr CompleteDeclaration;
+
+ [FieldOffset(72)]
+ public uint DefinitionOrder;
+
+ [FieldOffset(104)]
+ public global::System.IntPtr OriginalPtr;
+
+ [FieldOffset(112)]
+ public global::System.IntPtr Comment;
+
+ [FieldOffset(120)]
+ public global::System.IntPtr TemplatedDecl;
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev")]
+ internal static extern void ctor_0(global::System.IntPtr instance);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2ERKS2_")]
+ internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="_ZN8CppSharp9CppParser3AST17TypeAliasTemplateD2Ev")]
+ internal static extern void dtor_0(global::System.IntPtr instance);
+ }
+
+ public static new TypeAliasTemplate __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native.ToPointer(), skipVTables);
+ }
+
+ public static TypeAliasTemplate __CreateInstance(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native, skipVTables);
+ }
+
+ private static void* __CopyValue(TypeAliasTemplate.Internal native)
+ {
+ var ret = Marshal.AllocHGlobal(152);
+ CppSharp.Parser.AST.TypeAliasTemplate.Internal.cctor_1(ret, new global::System.IntPtr(&native));
+ return ret.ToPointer();
+ }
+
+ private TypeAliasTemplate(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ : this(__CopyValue(native), skipVTables)
+ {
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ }
+
+ protected TypeAliasTemplate(void* native, bool skipVTables = false)
+ : base((void*) null)
+ {
+ __PointerAdjustment = 0;
+ if (native == null)
+ return;
+ __Instance = new global::System.IntPtr(native);
+ }
+
+ public TypeAliasTemplate()
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(152);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ Internal.ctor_0((__Instance + __PointerAdjustment));
+ }
+
+ public TypeAliasTemplate(CppSharp.Parser.AST.TypeAliasTemplate _0)
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(152);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__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_1((__Instance + __PointerAdjustment), __arg0);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ CppSharp.Parser.AST.Declaration __dummy;
+ NativeToManagedMap.TryRemove(__Instance, out __dummy);
+ Internal.dtor_0((__Instance + __PointerAdjustment));
+ if (__ownsNativeInstance)
+ Marshal.FreeHGlobal(__Instance);
+ }
+ }
+
public unsafe partial class TemplateParameter : CppSharp.Parser.AST.Declaration, IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 136)]
diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/AST.cs
index 7b96b883..6876fe28 100644
--- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/AST.cs
+++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/AST.cs
@@ -47,19 +47,20 @@ namespace CppSharp
AccessSpecifier = 9,
Class = 10,
Template = 11,
- ClassTemplate = 12,
- ClassTemplateSpecialization = 13,
- ClassTemplatePartialSpecialization = 14,
- FunctionTemplate = 15,
- Namespace = 16,
- PreprocessedEntity = 17,
- MacroDefinition = 18,
- MacroExpansion = 19,
- TranslationUnit = 20,
- Friend = 21,
- TemplateTemplateParm = 22,
- TemplateTypeParm = 23,
- NonTypeTemplateParm = 24
+ TypeAliasTemplate = 12,
+ ClassTemplate = 13,
+ ClassTemplateSpecialization = 14,
+ ClassTemplatePartialSpecialization = 15,
+ FunctionTemplate = 16,
+ Namespace = 17,
+ PreprocessedEntity = 18,
+ MacroDefinition = 19,
+ MacroExpansion = 20,
+ TranslationUnit = 21,
+ Friend = 22,
+ TemplateTemplateParm = 23,
+ TemplateTypeParm = 24,
+ NonTypeTemplateParm = 25
}
public enum AccessSpecifier
@@ -8269,6 +8270,133 @@ namespace CppSharp
}
}
+ public unsafe partial class TypeAliasTemplate : CppSharp.Parser.AST.Template, IDisposable
+ {
+ [StructLayout(LayoutKind.Explicit, Size = 224)]
+ public new partial struct Internal
+ {
+ [FieldOffset(0)]
+ public CppSharp.Parser.AST.DeclarationKind Kind;
+
+ [FieldOffset(4)]
+ public CppSharp.Parser.AST.AccessSpecifier Access;
+
+ [FieldOffset(8)]
+ public global::System.IntPtr _Namespace;
+
+ [FieldOffset(16)]
+ public CppSharp.Parser.SourceLocation.Internal Location;
+
+ [FieldOffset(20)]
+ public int LineNumberStart;
+
+ [FieldOffset(24)]
+ public int LineNumberEnd;
+
+ [FieldOffset(128)]
+ public byte IsIncomplete;
+
+ [FieldOffset(129)]
+ public byte IsDependent;
+
+ [FieldOffset(130)]
+ public byte IsImplicit;
+
+ [FieldOffset(136)]
+ public global::System.IntPtr CompleteDeclaration;
+
+ [FieldOffset(144)]
+ public uint DefinitionOrder;
+
+ [FieldOffset(176)]
+ public global::System.IntPtr OriginalPtr;
+
+ [FieldOffset(184)]
+ public global::System.IntPtr Comment;
+
+ [FieldOffset(192)]
+ public global::System.IntPtr TemplatedDecl;
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="??0TypeAliasTemplate@AST@CppParser@CppSharp@@QEAA@XZ")]
+ internal static extern global::System.IntPtr ctor_0(global::System.IntPtr instance);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="??0TypeAliasTemplate@AST@CppParser@CppSharp@@QEAA@AEBV0123@@Z")]
+ internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
+ EntryPoint="??1TypeAliasTemplate@AST@CppParser@CppSharp@@QEAA@XZ")]
+ internal static extern void dtor_0(global::System.IntPtr instance, int delete);
+ }
+
+ public static new TypeAliasTemplate __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native.ToPointer(), skipVTables);
+ }
+
+ public static TypeAliasTemplate __CreateInstance(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ {
+ return new TypeAliasTemplate(native, skipVTables);
+ }
+
+ private static void* __CopyValue(TypeAliasTemplate.Internal native)
+ {
+ var ret = Marshal.AllocHGlobal(224);
+ CppSharp.Parser.AST.TypeAliasTemplate.Internal.cctor_1(ret, new global::System.IntPtr(&native));
+ return ret.ToPointer();
+ }
+
+ private TypeAliasTemplate(TypeAliasTemplate.Internal native, bool skipVTables = false)
+ : this(__CopyValue(native), skipVTables)
+ {
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ }
+
+ protected TypeAliasTemplate(void* native, bool skipVTables = false)
+ : base((void*) null)
+ {
+ __PointerAdjustment = 0;
+ if (native == null)
+ return;
+ __Instance = new global::System.IntPtr(native);
+ }
+
+ public TypeAliasTemplate()
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(224);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__Instance] = this;
+ Internal.ctor_0((__Instance + __PointerAdjustment));
+ }
+
+ public TypeAliasTemplate(CppSharp.Parser.AST.TypeAliasTemplate _0)
+ : this((void*) null)
+ {
+ __Instance = Marshal.AllocHGlobal(224);
+ __ownsNativeInstance = true;
+ NativeToManagedMap[__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_1((__Instance + __PointerAdjustment), __arg0);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ CppSharp.Parser.AST.Declaration __dummy;
+ NativeToManagedMap.TryRemove(__Instance, out __dummy);
+ Internal.dtor_0((__Instance + __PointerAdjustment), 0);
+ if (__ownsNativeInstance)
+ Marshal.FreeHGlobal(__Instance);
+ }
+ }
+
public unsafe partial class TemplateParameter : CppSharp.Parser.AST.Declaration, IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 208)]
diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp
index 8addf689..153ebee2 100644
--- a/src/CppParser/Parser.cpp
+++ b/src/CppParser/Parser.cpp
@@ -1278,6 +1278,36 @@ Parser::WalkTemplateArgument(const clang::TemplateArgument& TA, clang::TemplateA
//-----------------------------------//
+TypeAliasTemplate* Parser::WalkTypeAliasTemplate(
+ const clang::TypeAliasTemplateDecl* TD)
+{
+ using namespace clang;
+
+ auto NS = GetNamespace(TD);
+ assert(NS && "Expected a valid namespace");
+
+ auto USR = GetDeclUSR(TD);
+ auto TA = NS->FindTypeAliasTemplate(USR);
+ if (TA != nullptr)
+ return TA;
+
+ // TODO: Add this when we add TypeAliasDecl to AST.
+ //auto TemplatedDecl = TD->getTemplatedDecl();
+
+ TA = new TypeAliasTemplate();
+ HandleDeclaration(TD, TA);
+
+ TA->Name = GetDeclName(TD);
+ //TA->TemplatedDecl = TAD;
+ TA->Parameters = WalkTemplateParameterList(TD->getTemplateParameters());
+
+ NS->Templates.push_back(TA);
+
+ return TA;
+}
+
+//-----------------------------------//
+
FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl* TD)
{
using namespace clang;
@@ -3146,6 +3176,14 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D,
Decl = FT;
break;
}
+ case Decl::TypeAliasTemplate:
+ {
+ auto TD = cast(D);
+ auto TA = WalkTypeAliasTemplate(TD);
+
+ Decl = TA;
+ break;
+ }
case Decl::Enum:
{
auto ED = cast(D);
@@ -3268,8 +3306,6 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D,
case Decl::UnresolvedUsingValue:
case Decl::IndirectField:
case Decl::StaticAssert:
- case Decl::TypeAliasTemplate:
- break;
default:
{
Debug("Unhandled declaration kind: %s\n", D->getDeclKindName());
diff --git a/src/CppParser/Parser.h b/src/CppParser/Parser.h
index 04a5d202..d0de7ede 100644
--- a/src/CppParser/Parser.h
+++ b/src/CppParser/Parser.h
@@ -92,6 +92,7 @@ private:
TypeTemplateParameter* WalkTypeTemplateParameter(const clang::TemplateTypeParmDecl* TTPD);
NonTypeTemplateParameter* WalkNonTypeTemplateParameter(const clang::NonTypeTemplateParmDecl* TTPD);
std::vector WalkTemplateParameterList(const clang::TemplateParameterList* TPL);
+ TypeAliasTemplate* WalkTypeAliasTemplate(const clang::TypeAliasTemplateDecl* TD);
ClassTemplate* WalkClassTemplate(const clang::ClassTemplateDecl* TD);
FunctionTemplate* WalkFunctionTemplate(const clang::FunctionTemplateDecl* TD);
std::vector WalkTemplateArgumentList(const clang::TemplateArgumentList* TAL, clang::TemplateSpecializationTypeLoc* TSTL);
diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs
index edfd633a..b6e5455d 100644
--- a/src/Generator.Tests/AST/TestAST.cs
+++ b/src/Generator.Tests/AST/TestAST.cs
@@ -165,6 +165,11 @@ namespace CppSharp.Generator.Tests.AST
{
throw new NotImplementedException();
}
+
+ public bool VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+ {
+ throw new NotImplementedException();
+ }
}
#endregion
diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs
index cc766ddb..c69019d8 100644
--- a/src/Generator/Generators/CLI/CLITypePrinter.cs
+++ b/src/Generator/Generators/CLI/CLITypePrinter.cs
@@ -444,5 +444,10 @@ namespace CppSharp.Generators.CLI
{
return nonTypeTemplateParameter.Name;
}
+
+ public string VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs
index afa877b1..d5cf5f50 100644
--- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs
+++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs
@@ -754,6 +754,11 @@ namespace CppSharp.Generators.CSharp
{
return nonTypeTemplateParameter.Name;
}
+
+ public CSharpTypePrinterResult VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+ {
+ throw new NotImplementedException();
+ }
}
public static class CSharpTypePrinterExtensions
diff --git a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs
index 696cc2b2..fc661f94 100644
--- a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs
+++ b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs
@@ -258,6 +258,11 @@ namespace CppSharp.Passes
return false;
}
+ public bool VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+ {
+ return false;
+ }
+
#endregion
}
diff --git a/src/Generator/Types/CppTypePrinter.cs b/src/Generator/Types/CppTypePrinter.cs
index 8c2314fa..4752144c 100644
--- a/src/Generator/Types/CppTypePrinter.cs
+++ b/src/Generator/Types/CppTypePrinter.cs
@@ -368,5 +368,10 @@ namespace CppSharp.Types
return string.Format("{0} = {1}", nonTypeTemplateParameter.Name,
nonTypeTemplateParameter.DefaultArgument.String);
}
+
+ public string VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/tests/Common/Common.cpp b/tests/Common/Common.cpp
index 715762d4..3b570b07 100644
--- a/tests/Common/Common.cpp
+++ b/tests/Common/Common.cpp
@@ -622,3 +622,8 @@ void HasProtectedEnum::function(ProtectedEnum param)
void FuncWithTypeAlias(custom_int_t i)
{
}
+
+void FuncWithTemplateTypeAlias(TypeAliasTemplate i)
+{
+
+}
\ No newline at end of file
diff --git a/tests/Common/Common.h b/tests/Common/Common.h
index 437c073e..48155f60 100644
--- a/tests/Common/Common.h
+++ b/tests/Common/Common.h
@@ -1104,7 +1104,11 @@ protected:
};
using custom_int_t = int;
-void FuncWithTypeAlias(custom_int_t i);
+DLL_API void FuncWithTypeAlias(custom_int_t i);
+
+template
+using TypeAliasTemplate = TemplateWithVirtual;
+DLL_API void FuncWithTemplateTypeAlias(TypeAliasTemplate i);
struct TestsTypes
{